public pageAppConfig() { Core core = Core.GetCore(); AppConfig config = core.GetConfig(); bool ringtonePickerOpened = false; Title = "Application Configuration"; var defaultNotificationLabel = new Label { Text = "Default Notification Sound" }; var defaultNotificationLabelDesc = new Label { Text = "Represents the default ring tone to assign for new tasks." }; Button ringTonePickerBtn = new Button { Text = "Select RingTone", }; ringTonePickerBtn.Clicked += (sender, args) => { if (!ringtonePickerOpened) { DependencyService.Get <iRingTones>().SetSelectedRingTone(config.DefaultNotificationSound); ringtonePickerOpened = true; } DependencyService.Get <iRingTones>().GetRingTonePicker(); }; var fontLabel = new Label { Text = "Font" }; var fontPicker = new Picker(); fontPicker.Items.Add("Arial"); fontPicker.Items.Add("Courier"); fontPicker.Items.Add("Helvetica"); fontPicker.Items.Add("Times New Roman"); fontPicker.SetBinding(Entry.TextProperty, "Font"); fontPicker.Title = "Font"; fontPicker.SelectedIndex = 0; for (int i = 0; i < fontPicker.Items.Count; i++) { if (config.Theme.font == fontPicker.Items[i]) { fontPicker.SelectedIndex = i; break; } } var fontSizeLabel = new Label { Text = "Font Size" }; var fontSizePicker = new Picker(); fontSizePicker.Items.Add("Default"); fontSizePicker.Items.Add("Micro"); fontSizePicker.Items.Add("Small"); fontSizePicker.Items.Add("Medium"); fontSizePicker.Items.Add("Large"); fontSizePicker.SetBinding(Entry.TextProperty, "Font Size"); fontSizePicker.SelectedIndex = 0; string sizeToFind = config.sizeToName[config.Theme.fontSize]; var sizeArray = config.nameToSize.ToArray(); for (int i = 0; i < fontSizePicker.Items.Count; i++) { if (sizeToFind == fontSizePicker.Items[i]) { fontSizePicker.SelectedIndex = i; break; } } var fontColourLabel = new Label { Text = "Font Colour" }; var fontColourPicker = new Picker(); var colourArray = config.nameToColour.ToArray(); for (int i = 0; i < colourArray.Length; i++) { fontColourPicker.Items.Add(colourArray[i].Key); } fontColourPicker.SetBinding(Entry.TextProperty, "Font Colour"); fontColourPicker.Title = "Font Colour"; fontColourPicker.SelectedIndex = 0; string colourToFind = config.colourToName[config.Theme.fontColour]; for (int i = 0; i < colourArray.Length; i++) { if (colourToFind == colourArray[i].Key) { fontColourPicker.SelectedIndex = i; break; } } BoxView fontColourBoxView = new BoxView { WidthRequest = 20, HeightRequest = 20, HorizontalOptions = LayoutOptions.FillAndExpand, VerticalOptions = LayoutOptions.CenterAndExpand }; fontColourBoxView.Color = config.nameToColour[colourToFind]; fontColourPicker.SelectedIndexChanged += (sender, args) => { if (fontColourPicker.SelectedIndex == -1) { fontColourBoxView.Color = Color.Default; } else { string colourName = fontColourPicker.Items[fontColourPicker.SelectedIndex]; fontColourBoxView.Color = config.nameToColour[colourName]; } }; var backgroundColourLabel = new Label { Text = "Background Colour" }; var backgroundColourPicker = new Picker(); for (int i = 0; i < colourArray.Length; i++) { backgroundColourPicker.Items.Add(colourArray[i].Key); } backgroundColourPicker.SetBinding(Entry.TextProperty, "Background Colour"); backgroundColourPicker.Title = "Background Colour"; backgroundColourPicker.SelectedIndex = 0; colourToFind = config.colourToName[config.Theme.backgroundColour]; for (int i = 0; i < colourArray.Length; i++) { if (colourToFind == colourArray[i].Key) { backgroundColourPicker.SelectedIndex = i; break; } } BoxView backgroundColourBoxView = new BoxView { WidthRequest = 20, HeightRequest = 20, HorizontalOptions = LayoutOptions.FillAndExpand, VerticalOptions = LayoutOptions.CenterAndExpand }; backgroundColourBoxView.Color = config.nameToColour[colourToFind]; backgroundColourPicker.SelectedIndexChanged += (sender, args) => { if (backgroundColourPicker.SelectedIndex == -1) { backgroundColourBoxView.Color = Color.Default; } else { string colorName = backgroundColourPicker.Items[backgroundColourPicker.SelectedIndex]; backgroundColourBoxView.Color = config.nameToColour[colorName]; } }; var SaveButton = new Button { Text = "Save Configuration" }; SaveButton.Clicked += (sender, e) => { ThemeStruct themeStruct = config.Theme; if (backgroundColourPicker.Items[backgroundColourPicker.SelectedIndex] == fontColourPicker.Items[fontColourPicker.SelectedIndex]) { DisplayAlert("Error", "You cannot select the same background and foreground colour. Please correct your selection and try again.", "Ok"); } else { config.DefaultNotificationSound = DependencyService.Get <iRingTones>().GetSelectedRingTone(); themeStruct.backgroundColour = config.nameToColour[backgroundColourPicker.Items[backgroundColourPicker.SelectedIndex]]; themeStruct.font = fontPicker.Items[fontPicker.SelectedIndex]; themeStruct.fontColour = config.nameToColour[fontColourPicker.Items[fontColourPicker.SelectedIndex]]; themeStruct.fontSize = config.nameToSize[fontSizePicker.Items[fontSizePicker.SelectedIndex]]; config.Theme = themeStruct; } config.Write(core.SCHEDULEAPP_CONFIG_FILE); Navigation.PopToRootAsync(); }; ScrollView scrollView = new ScrollView { VerticalOptions = LayoutOptions.FillAndExpand, Content = new StackLayout { VerticalOptions = LayoutOptions.CenterAndExpand, Padding = new Thickness(20), Children = { defaultNotificationLabel, ringTonePickerBtn, fontLabel, fontPicker, fontSizeLabel, fontSizePicker, fontColourLabel, fontColourPicker, fontColourBoxView, backgroundColourLabel, backgroundColourPicker, backgroundColourBoxView, SaveButton } } }; this.Content = scrollView; }