diff --git a/src/App/Pages/Settings/SettingsPage/ISettingsPageListItem.cs b/src/App/Pages/Settings/SettingsPage/ISettingsPageListItem.cs new file mode 100644 index 000000000..e8edc5063 --- /dev/null +++ b/src/App/Pages/Settings/SettingsPage/ISettingsPageListItem.cs @@ -0,0 +1,6 @@ +namespace Bit.App.Pages +{ + public interface ISettingsPageListItem + { + } +} diff --git a/src/App/Pages/Settings/SettingsPage/SettingsPage.xaml b/src/App/Pages/Settings/SettingsPage/SettingsPage.xaml index c7238146f..b3964fe3e 100644 --- a/src/App/Pages/Settings/SettingsPage/SettingsPage.xaml +++ b/src/App/Pages/Settings/SettingsPage/SettingsPage.xaml @@ -82,8 +82,26 @@ + + + + + + + + + @@ -93,27 +111,8 @@ ItemsSource="{Binding GroupedItems}" VerticalOptions="FillAndExpand" ItemTemplate="{StaticResource listItemDataTemplateSelector}" - IsGrouped="True" SelectionMode="Single" SelectionChanged="RowSelected" - StyleClass="list, list-platform"> - - - - - - - - - - - - + StyleClass="list, list-platform" /> diff --git a/src/App/Pages/Settings/SettingsPage/SettingsPageHeaderListItem.cs b/src/App/Pages/Settings/SettingsPage/SettingsPageHeaderListItem.cs new file mode 100644 index 000000000..ec3aafe16 --- /dev/null +++ b/src/App/Pages/Settings/SettingsPage/SettingsPageHeaderListItem.cs @@ -0,0 +1,12 @@ +namespace Bit.App.Pages +{ + public class SettingsPageHeaderListItem : ISettingsPageListItem + { + public SettingsPageHeaderListItem(string title) + { + Title = title; + } + + public string Title { get; } + } +} diff --git a/src/App/Pages/Settings/SettingsPage/SettingsPageListItem.cs b/src/App/Pages/Settings/SettingsPage/SettingsPageListItem.cs index b63efcf01..c1e8878f4 100644 --- a/src/App/Pages/Settings/SettingsPage/SettingsPageListItem.cs +++ b/src/App/Pages/Settings/SettingsPage/SettingsPageListItem.cs @@ -1,12 +1,11 @@ using System; using Bit.App.Resources; using Bit.App.Utilities; -using System.Collections.Generic; using Xamarin.Forms; namespace Bit.App.Pages { - public class SettingsPageListItem + public class SettingsPageListItem : ISettingsPageListItem { public string Icon { get; set; } public string Name { get; set; } diff --git a/src/App/Pages/Settings/SettingsPage/SettingsPageListItemSelector.cs b/src/App/Pages/Settings/SettingsPage/SettingsPageListItemSelector.cs index 246967de1..74dae3f2d 100644 --- a/src/App/Pages/Settings/SettingsPage/SettingsPageListItemSelector.cs +++ b/src/App/Pages/Settings/SettingsPage/SettingsPageListItemSelector.cs @@ -4,21 +4,19 @@ namespace Bit.App.Pages { public class SettingsPageListItemSelector : DataTemplateSelector { + public DataTemplate HeaderTemplate { get; set; } public DataTemplate RegularTemplate { get; set; } public DataTemplate TimePickerTemplate { get; set; } protected override DataTemplate OnSelectTemplate(object item, BindableObject container) { + if (item is SettingsPageHeaderListItem) + { + return HeaderTemplate; + } if (item is SettingsPageListItem listItem) { - if (listItem.ShowTimeInput) - { - return TimePickerTemplate; - } - else - { - return RegularTemplate; - } + return listItem.ShowTimeInput ? TimePickerTemplate : RegularTemplate; } return null; } diff --git a/src/App/Pages/Settings/SettingsPage/SettingsPageViewModel.cs b/src/App/Pages/Settings/SettingsPage/SettingsPageViewModel.cs index 5050a2343..e34521143 100644 --- a/src/App/Pages/Settings/SettingsPage/SettingsPageViewModel.cs +++ b/src/App/Pages/Settings/SettingsPage/SettingsPageViewModel.cs @@ -83,11 +83,11 @@ namespace Bit.App.Pages _keyConnectorService = ServiceContainer.Resolve("keyConnectorService"); _clipboardService = ServiceContainer.Resolve("clipboardService"); - GroupedItems = new ObservableRangeCollection(); + GroupedItems = new ObservableRangeCollection(); PageTitle = AppResources.Settings; } - public ObservableRangeCollection GroupedItems { get; set; } + public ObservableRangeCollection GroupedItems { get; set; } public async Task InitAsync() { @@ -409,8 +409,6 @@ namespace Bit.App.Pages public void BuildList() { - GroupedItems.Clear(); - var doUpper = Device.RuntimePlatform != Device.Android; var autofillItems = new List(); if (Device.RuntimePlatform == Device.Android) @@ -512,7 +510,9 @@ namespace Bit.App.Pages new SettingsPageListItem { Name = AppResources.RateTheApp }, new SettingsPageListItem { Name = AppResources.DeleteAccount } }; - GroupedItems.AddRange(new List + + // TODO: improve this. Leaving this as is to reduce error possibility on the hotfix. + var settingsListGroupItems = new List() { new SettingsPageListGroup(autofillItems, AppResources.Autofill, doUpper, true), new SettingsPageListGroup(manageItems, AppResources.Manage, doUpper), @@ -520,7 +520,14 @@ namespace Bit.App.Pages new SettingsPageListGroup(accountItems, AppResources.Account, doUpper), new SettingsPageListGroup(toolsItems, AppResources.Tools, doUpper), new SettingsPageListGroup(otherItems, AppResources.Other, doUpper) - }); + }; + var settingsItems = new List(); + foreach (var itemGroup in settingsListGroupItems) + { + settingsItems.Add(new SettingsPageHeaderListItem(itemGroup.Name)); + settingsItems.AddRange(itemGroup); + } + GroupedItems.ReplaceRange(settingsItems); } private bool IncludeLinksWithSubscriptionInfo()