コード例 #1
0
ファイル: SettingsPage.xaml.cs プロジェクト: xq2/mobile
        void ActivateTimePicker(object sender, EventArgs args)
        {
            var stackLayout           = (ExtendedStackLayout)sender;
            SettingsPageListItem item = (SettingsPageListItem)stackLayout.BindingContext;

            if (item.ShowTimeInput)
            {
                var timePicker = stackLayout.Children.Where(x => x is TimePicker).FirstOrDefault();
                ((TimePicker)timePicker)?.Focus();
            }
        }
コード例 #2
0
        public void BuildList()
        {
            var doUpper       = Device.RuntimePlatform != Device.Android;
            var autofillItems = new List <SettingsPageListItem>();

            if (Device.RuntimePlatform == Device.Android)
            {
                if (_deviceActionService.SupportsAutofillService())
                {
                    autofillItems.Add(new SettingsPageListItem
                    {
                        Name     = AppResources.AutofillService,
                        SubLabel = _deviceActionService.AutofillServiceEnabled() ?
                                   AppResources.Enabled : AppResources.Disabled
                    });
                }

                var accessibilityEnabled = _deviceActionService.AutofillAccessibilityServiceRunning() &&
                                           _deviceActionService.AutofillAccessibilityOverlayPermitted();
                autofillItems.Add(new SettingsPageListItem
                {
                    Name     = AppResources.AutofillAccessibilityService,
                    SubLabel = accessibilityEnabled ?
                               AppResources.Enabled : AppResources.Disabled
                });
            }
            else
            {
                if (_deviceActionService.SystemMajorVersion() >= 12)
                {
                    autofillItems.Add(new SettingsPageListItem {
                        Name = AppResources.PasswordAutofill
                    });
                }
                autofillItems.Add(new SettingsPageListItem {
                    Name = AppResources.AppExtension
                });
            }
            var manageItems = new List <SettingsPageListItem>
            {
                new SettingsPageListItem {
                    Name = AppResources.Folders
                },
                new SettingsPageListItem {
                    Name = AppResources.Sync, SubLabel = _lastSyncDate
                }
            };
            var securityItems = new List <SettingsPageListItem>
            {
                new SettingsPageListItem {
                    Name = AppResources.LockOptions, SubLabel = _lockOptionValue
                },
                new SettingsPageListItem
                {
                    Name     = AppResources.UnlockWithPIN,
                    SubLabel = _pin ? AppResources.Enabled : AppResources.Disabled
                },
                new SettingsPageListItem {
                    Name = AppResources.LockNow
                },
                new SettingsPageListItem {
                    Name = AppResources.TwoStepLogin
                }
            };

            if (_supportsFingerprint || _fingerprint)
            {
                var fingerprintName = AppResources.Fingerprint;
                if (Device.RuntimePlatform == Device.iOS)
                {
                    fingerprintName = _deviceActionService.SupportsFaceBiometric() ? AppResources.FaceID :
                                      AppResources.TouchID;
                }
                else if (Device.RuntimePlatform == Device.Android && _deviceActionService.UseNativeBiometric())
                {
                    fingerprintName = AppResources.Biometrics;
                }
                var item = new SettingsPageListItem
                {
                    Name     = string.Format(AppResources.UnlockWith, fingerprintName),
                    SubLabel = _fingerprint ? AppResources.Enabled : AppResources.Disabled
                };
                securityItems.Insert(1, item);
            }
            var accountItems = new List <SettingsPageListItem>
            {
                new SettingsPageListItem {
                    Name = AppResources.ChangeMasterPassword
                },
                new SettingsPageListItem {
                    Name = AppResources.FingerprintPhrase
                },
                new SettingsPageListItem {
                    Name = AppResources.LogOut
                }
            };
            var toolsItems = new List <SettingsPageListItem>
            {
                new SettingsPageListItem {
                    Name = AppResources.ImportItems
                },
                new SettingsPageListItem {
                    Name = AppResources.ExportVault
                },
                new SettingsPageListItem {
                    Name = AppResources.ShareVault
                },
                new SettingsPageListItem {
                    Name = AppResources.WebVault
                }
            };
            var otherItems = new List <SettingsPageListItem>
            {
                new SettingsPageListItem {
                    Name = AppResources.Options
                },
                new SettingsPageListItem {
                    Name = AppResources.About
                },
                new SettingsPageListItem {
                    Name = AppResources.HelpAndFeedback
                },
                new SettingsPageListItem {
                    Name = AppResources.RateTheApp
                }
            };

            GroupedItems.ResetWithRange(new List <SettingsPageListGroup>
            {
                new SettingsPageListGroup(autofillItems, AppResources.Autofill, doUpper, true),
                new SettingsPageListGroup(manageItems, AppResources.Manage, doUpper),
                new SettingsPageListGroup(securityItems, AppResources.Security, doUpper),
                new SettingsPageListGroup(accountItems, AppResources.Account, doUpper),
                new SettingsPageListGroup(toolsItems, AppResources.Tools, doUpper),
                new SettingsPageListGroup(otherItems, AppResources.Other, doUpper)
            });
        }
コード例 #3
0
        public void BuildList()
        {
            var doUpper       = Device.RuntimePlatform != Device.Android;
            var autofillItems = new List <SettingsPageListItem>();

            if (Device.RuntimePlatform == Device.Android)
            {
                autofillItems.Add(new SettingsPageListItem
                {
                    Name     = AppResources.AutofillServices,
                    SubLabel = _deviceActionService.AutofillServicesEnabled() ?
                               AppResources.Enabled : AppResources.Disabled
                });
            }
            else
            {
                if (_deviceActionService.SystemMajorVersion() >= 12)
                {
                    autofillItems.Add(new SettingsPageListItem {
                        Name = AppResources.PasswordAutofill
                    });
                }
                autofillItems.Add(new SettingsPageListItem {
                    Name = AppResources.AppExtension
                });
            }
            var manageItems = new List <SettingsPageListItem>
            {
                new SettingsPageListItem {
                    Name = AppResources.Folders
                },
                new SettingsPageListItem {
                    Name = AppResources.Sync, SubLabel = _lastSyncDate
                }
            };
            var securityItems = new List <SettingsPageListItem>
            {
                new SettingsPageListItem {
                    Name = AppResources.VaultTimeout, SubLabel = _vaultTimeoutDisplayValue
                },
                new SettingsPageListItem
                {
                    Name     = AppResources.VaultTimeoutAction,
                    SubLabel = _vaultTimeoutActionDisplayValue
                },
                new SettingsPageListItem
                {
                    Name     = AppResources.UnlockWithPIN,
                    SubLabel = _pin ? AppResources.Enabled : AppResources.Disabled
                },
                new SettingsPageListItem {
                    Name = AppResources.LockNow
                },
                new SettingsPageListItem {
                    Name = AppResources.TwoStepLogin
                }
            };

            if (_supportsBiometric || _biometric)
            {
                var biometricName = AppResources.Biometrics;
                if (Device.RuntimePlatform == Device.iOS)
                {
                    biometricName = _deviceActionService.SupportsFaceBiometric() ? AppResources.FaceID :
                                    AppResources.TouchID;
                }
                var item = new SettingsPageListItem
                {
                    Name     = string.Format(AppResources.UnlockWith, biometricName),
                    SubLabel = _biometric ? AppResources.Enabled : AppResources.Disabled
                };
                securityItems.Insert(2, item);
            }
            var accountItems = new List <SettingsPageListItem>
            {
                new SettingsPageListItem {
                    Name = AppResources.ChangeMasterPassword
                },
                new SettingsPageListItem {
                    Name = AppResources.FingerprintPhrase
                },
                new SettingsPageListItem {
                    Name = AppResources.LogOut
                }
            };
            var toolsItems = new List <SettingsPageListItem>
            {
                new SettingsPageListItem {
                    Name = AppResources.ImportItems
                },
                new SettingsPageListItem {
                    Name = AppResources.ExportVault
                },
                new SettingsPageListItem {
                    Name = AppResources.WebVault
                }
            };
            var otherItems = new List <SettingsPageListItem>
            {
                new SettingsPageListItem {
                    Name = AppResources.Options
                },
                new SettingsPageListItem {
                    Name = AppResources.About
                },
                new SettingsPageListItem {
                    Name = AppResources.LearnOrg
                },
                new SettingsPageListItem {
                    Name = AppResources.HelpAndFeedback
                },
                new SettingsPageListItem {
                    Name = AppResources.RateTheApp
                }
            };

            GroupedItems.ResetWithRange(new List <SettingsPageListGroup>
            {
                new SettingsPageListGroup(autofillItems, AppResources.Autofill, doUpper, true),
                new SettingsPageListGroup(manageItems, AppResources.Manage, doUpper),
                new SettingsPageListGroup(securityItems, AppResources.Security, doUpper),
                new SettingsPageListGroup(accountItems, AppResources.Account, doUpper),
                new SettingsPageListGroup(toolsItems, AppResources.Tools, doUpper),
                new SettingsPageListGroup(otherItems, AppResources.Other, doUpper)
            });
        }
コード例 #4
0
        public void BuildList()
        {
            var doUpper       = Device.RuntimePlatform != Device.Android;
            var autofillItems = new List <SettingsPageListItem>();

            if (Device.RuntimePlatform == Device.Android)
            {
                autofillItems.Add(new SettingsPageListItem
                {
                    Name     = AppResources.AutofillServices,
                    SubLabel = _deviceActionService.AutofillServicesEnabled() ?
                               AppResources.Enabled : AppResources.Disabled
                });
            }
            else
            {
                if (_deviceActionService.SystemMajorVersion() >= 12)
                {
                    autofillItems.Add(new SettingsPageListItem {
                        Name = AppResources.PasswordAutofill
                    });
                }
                autofillItems.Add(new SettingsPageListItem {
                    Name = AppResources.AppExtension
                });
            }
            var manageItems = new List <SettingsPageListItem>
            {
                new SettingsPageListItem {
                    Name = AppResources.Folders
                },
                new SettingsPageListItem {
                    Name = AppResources.Sync, SubLabel = _lastSyncDate
                }
            };
            var securityItems = new List <SettingsPageListItem>
            {
                new SettingsPageListItem {
                    Name = AppResources.VaultTimeout, SubLabel = _vaultTimeoutDisplayValue
                },
                new SettingsPageListItem
                {
                    Name     = AppResources.VaultTimeoutAction,
                    SubLabel = _vaultTimeoutActionDisplayValue
                },
                new SettingsPageListItem
                {
                    Name     = AppResources.UnlockWithPIN,
                    SubLabel = _pin ? AppResources.Enabled : AppResources.Disabled
                },
                new SettingsPageListItem {
                    Name = AppResources.LockNow
                },
                new SettingsPageListItem {
                    Name = AppResources.TwoStepLogin
                }
            };

            if (_supportsBiometric || _biometric)
            {
                var biometricName = AppResources.Biometrics;
                if (Device.RuntimePlatform == Device.iOS)
                {
                    biometricName = _deviceActionService.SupportsFaceBiometric() ? AppResources.FaceID :
                                    AppResources.TouchID;
                }
                var item = new SettingsPageListItem
                {
                    Name     = string.Format(AppResources.UnlockWith, biometricName),
                    SubLabel = _biometric ? AppResources.Enabled : AppResources.Disabled
                };
                securityItems.Insert(2, item);
            }
            if (_vaultTimeoutDisplayValue == AppResources.Custom)
            {
                securityItems.Insert(1, new SettingsPageListItem
                {
                    Name = AppResources.Custom,
                    Time = TimeSpan.FromMinutes(Math.Abs((double)_vaultTimeout)),
                });
            }
            if (_vaultTimeoutPolicy != null)
            {
                var maximumTimeout = _policyService.GetPolicyInt(_vaultTimeoutPolicy, "minutes").GetValueOrDefault();
                securityItems.Insert(0, new SettingsPageListItem
                {
                    Name = string.Format(AppResources.VaultTimeoutPolicyInEffect,
                                         Math.Floor((float)maximumTimeout / 60),
                                         maximumTimeout % 60),
                    UseFrame = true,
                });
            }
            var accountItems = new List <SettingsPageListItem>
            {
                new SettingsPageListItem {
                    Name = AppResources.FingerprintPhrase
                },
                new SettingsPageListItem {
                    Name = AppResources.LogOut
                }
            };

            if (IncludeLinksWithSubscriptionInfo())
            {
                accountItems.Insert(0, new SettingsPageListItem {
                    Name = AppResources.ChangeMasterPassword
                });
            }
            var toolsItems = new List <SettingsPageListItem>
            {
                new SettingsPageListItem {
                    Name = AppResources.ImportItems
                },
                new SettingsPageListItem {
                    Name = AppResources.ExportVault
                }
            };

            if (IncludeLinksWithSubscriptionInfo())
            {
                toolsItems.Add(new SettingsPageListItem {
                    Name = AppResources.LearnOrg
                });
                toolsItems.Add(new SettingsPageListItem {
                    Name = AppResources.WebVault
                });
            }
            var otherItems = new List <SettingsPageListItem>
            {
                new SettingsPageListItem {
                    Name = AppResources.Options
                },
                new SettingsPageListItem {
                    Name = AppResources.About
                },
                new SettingsPageListItem {
                    Name = AppResources.HelpAndFeedback
                },
                new SettingsPageListItem {
                    Name = AppResources.RateTheApp
                }
            };

            GroupedItems.ResetWithRange(new List <SettingsPageListGroup>
            {
                new SettingsPageListGroup(autofillItems, AppResources.Autofill, doUpper, true),
                new SettingsPageListGroup(manageItems, AppResources.Manage, doUpper),
                new SettingsPageListGroup(securityItems, AppResources.Security, doUpper),
                new SettingsPageListGroup(accountItems, AppResources.Account, doUpper),
                new SettingsPageListGroup(toolsItems, AppResources.Tools, doUpper),
                new SettingsPageListGroup(otherItems, AppResources.Other, doUpper)
            });
        }
コード例 #5
0
        private void BuildList()
        {
            var doUpper     = Device.RuntimePlatform != Device.Android;
            var manageItems = new List <SettingsPageListItem>
            {
                new SettingsPageListItem {
                    Name = AppResources.Folders
                },
                new SettingsPageListItem {
                    Name = AppResources.Sync, SubLabel = _lastSyncDate
                }
            };
            var securityItems = new List <SettingsPageListItem>
            {
                new SettingsPageListItem {
                    Name = AppResources.LockOptions, SubLabel = _lockOptionValue
                },
                new SettingsPageListItem {
                    Name = AppResources.UnlockWithPIN, SubLabel = _pin ? "✓" : null
                },
                new SettingsPageListItem {
                    Name = AppResources.LockNow
                },
                new SettingsPageListItem {
                    Name = AppResources.TwoStepLogin
                }
            };

            if (_supportsFingerprint)
            {
                var item = new SettingsPageListItem
                {
                    Name     = string.Format(AppResources.UnlockWith, _fingerprintName),
                    SubLabel = _fingerprint ? "✓" : null
                };
                securityItems.Insert(1, item);
            }
            var accountItems = new List <SettingsPageListItem>
            {
                new SettingsPageListItem {
                    Name = AppResources.ChangeMasterPassword
                },
                new SettingsPageListItem {
                    Name = AppResources.FingerprintPhrase
                },
                new SettingsPageListItem {
                    Name = AppResources.LogOut
                }
            };
            var toolsItems = new List <SettingsPageListItem>
            {
                new SettingsPageListItem {
                    Name = AppResources.ImportItems
                },
                new SettingsPageListItem {
                    Name = AppResources.ExportVault
                },
                new SettingsPageListItem {
                    Name = AppResources.ShareVault
                },
                new SettingsPageListItem {
                    Name = AppResources.WebVault
                }
            };
            var otherItems = new List <SettingsPageListItem>
            {
                new SettingsPageListItem {
                    Name = AppResources.Options
                },
                new SettingsPageListItem {
                    Name = AppResources.About
                },
                new SettingsPageListItem {
                    Name = AppResources.HelpAndFeedback
                },
                new SettingsPageListItem {
                    Name = AppResources.RateTheApp
                }
            };

            GroupedItems.ResetWithRange(new List <SettingsPageListGroup>
            {
                new SettingsPageListGroup(manageItems, AppResources.Manage, doUpper),
                new SettingsPageListGroup(securityItems, AppResources.Security, doUpper),
                new SettingsPageListGroup(accountItems, AppResources.Account, doUpper),
                new SettingsPageListGroup(toolsItems, AppResources.Tools, doUpper),
                new SettingsPageListGroup(otherItems, AppResources.Other, doUpper)
            });
        }
コード例 #6
0
        public void BuildList()
        {
            var doUpper       = Device.RuntimePlatform != Device.Android;
            var autofillItems = new List <SettingsPageListItem>();

            if (Device.RuntimePlatform == Device.Android)
            {
                autofillItems.Add(new SettingsPageListItem
                {
                    Name     = AppResources.AutofillServices,
                    SubLabel = _deviceActionService.AutofillServicesEnabled() ?
                               AppResources.Enabled : AppResources.Disabled
                });
            }
            else
            {
                if (_deviceActionService.SystemMajorVersion() >= 12)
                {
                    autofillItems.Add(new SettingsPageListItem {
                        Name = AppResources.PasswordAutofill
                    });
                }
                autofillItems.Add(new SettingsPageListItem {
                    Name = AppResources.AppExtension
                });
            }
            var manageItems = new List <SettingsPageListItem>
            {
                new SettingsPageListItem {
                    Name = AppResources.Folders
                },
                new SettingsPageListItem {
                    Name = AppResources.Sync, SubLabel = _lastSyncDate
                }
            };
            var securityItems = new List <SettingsPageListItem>
            {
                new SettingsPageListItem {
                    Name = AppResources.VaultTimeout, SubLabel = _vaultTimeoutDisplayValue
                },
                new SettingsPageListItem
                {
                    Name     = AppResources.VaultTimeoutAction,
                    SubLabel = _vaultTimeoutActionDisplayValue
                },
                new SettingsPageListItem
                {
                    Name     = AppResources.UnlockWithPIN,
                    SubLabel = _pin ? AppResources.Enabled : AppResources.Disabled
                },
                new SettingsPageListItem {
                    Name = AppResources.LockNow
                },
                new SettingsPageListItem {
                    Name = AppResources.TwoStepLogin
                }
            };

            if (_supportsBiometric || _biometric)
            {
                var biometricName = AppResources.Biometrics;
                if (Device.RuntimePlatform == Device.iOS)
                {
                    biometricName = _deviceActionService.SupportsFaceBiometric() ? AppResources.FaceID :
                                    AppResources.TouchID;
                }
                var item = new SettingsPageListItem
                {
                    Name     = string.Format(AppResources.UnlockWith, biometricName),
                    SubLabel = _biometric ? AppResources.Enabled : AppResources.Disabled
                };
                securityItems.Insert(2, item);
            }
            if (_vaultTimeoutDisplayValue == AppResources.Custom)
            {
                securityItems.Insert(1, new SettingsPageListItem
                {
                    Name = AppResources.Custom,
                    Time = TimeSpan.FromMinutes(Math.Abs((double)_vaultTimeout.GetValueOrDefault())),
                });
            }
            if (_vaultTimeoutPolicy != null)
            {
                var maximumTimeout = _policyService.GetPolicyInt(_vaultTimeoutPolicy, "minutes").GetValueOrDefault();
                securityItems.Insert(0, new SettingsPageListItem
                {
                    Name = string.Format(AppResources.VaultTimeoutPolicyInEffect,
                                         Math.Floor((float)maximumTimeout / 60),
                                         maximumTimeout % 60),
                    UseFrame = true,
                });
            }
            var accountItems = new List <SettingsPageListItem>
            {
                new SettingsPageListItem {
                    Name = AppResources.FingerprintPhrase
                },
                new SettingsPageListItem {
                    Name = AppResources.LogOut
                }
            };

            if (_showChangeMasterPassword)
            {
                accountItems.Insert(0, new SettingsPageListItem {
                    Name = AppResources.ChangeMasterPassword
                });
            }
            var toolsItems = new List <SettingsPageListItem>
            {
                new SettingsPageListItem {
                    Name = AppResources.ImportItems
                },
                new SettingsPageListItem {
                    Name = AppResources.ExportVault
                }
            };

            if (IncludeLinksWithSubscriptionInfo())
            {
                toolsItems.Add(new SettingsPageListItem {
                    Name = AppResources.LearnOrg
                });
                toolsItems.Add(new SettingsPageListItem {
                    Name = AppResources.WebVault
                });
            }
            var otherItems = new List <SettingsPageListItem>
            {
                new SettingsPageListItem {
                    Name = AppResources.Options
                },
                new SettingsPageListItem {
                    Name = AppResources.About
                },
                new SettingsPageListItem {
                    Name = AppResources.HelpAndFeedback
                },
                new SettingsPageListItem {
                    Name = AppResources.RateTheApp
                },
                new SettingsPageListItem {
                    Name = AppResources.DeleteAccount
                }
            };

            // TODO: improve this. Leaving this as is to reduce error possibility on the hotfix.
            var settingsListGroupItems = new List <SettingsPageListGroup>()
            {
                new SettingsPageListGroup(autofillItems, AppResources.Autofill, doUpper, true),
                new SettingsPageListGroup(manageItems, AppResources.Manage, doUpper),
                new SettingsPageListGroup(securityItems, AppResources.Security, doUpper),
                new SettingsPageListGroup(accountItems, AppResources.Account, doUpper),
                new SettingsPageListGroup(toolsItems, AppResources.Tools, doUpper),
                new SettingsPageListGroup(otherItems, AppResources.Other, doUpper)
            };

            // TODO: refactor this
            if (Device.RuntimePlatform == Device.Android
                ||
                GroupedItems.Any())
            {
                var items = new List <ISettingsPageListItem>();
                foreach (var itemGroup in settingsListGroupItems)
                {
                    items.Add(new SettingsPageHeaderListItem(itemGroup.Name));
                    items.AddRange(itemGroup);
                }

                GroupedItems.ReplaceRange(items);
            }
            else
            {
                // HACK: we need this on iOS, so that it doesn't crash when adding coming from an empty list
                var first = true;
                var items = new List <ISettingsPageListItem>();
                foreach (var itemGroup in settingsListGroupItems)
                {
                    if (!first)
                    {
                        items.Add(new SettingsPageHeaderListItem(itemGroup.Name));
                    }
                    else
                    {
                        first = false;
                    }
                    items.AddRange(itemGroup);
                }

                if (settingsListGroupItems.Any())
                {
                    GroupedItems.ReplaceRange(new List <ISettingsPageListItem> {
                        new SettingsPageHeaderListItem(settingsListGroupItems[0].Name)
                    });
                    GroupedItems.AddRange(items);
                }
                else
                {
                    GroupedItems.Clear();
                }
            }
        }
コード例 #7
0
        public void BuildList()
        {
            //TODO: Refactor this once navigation is abstracted so that it doesn't depend on Page, e.g. Page.Navigation.PushModalAsync...

            var doUpper       = Device.RuntimePlatform != Device.Android;
            var autofillItems = new List <SettingsPageListItem>();

            if (Device.RuntimePlatform == Device.Android)
            {
                autofillItems.Add(new SettingsPageListItem
                {
                    Name         = AppResources.AutofillServices,
                    SubLabel     = _deviceActionService.AutofillServicesEnabled() ? AppResources.On : AppResources.Off,
                    ExecuteAsync = () => Page.Navigation.PushModalAsync(new NavigationPage(new AutofillServicesPage(Page as SettingsPage)))
                });
            }
            else
            {
                if (_deviceActionService.SystemMajorVersion() >= 12)
                {
                    autofillItems.Add(new SettingsPageListItem
                    {
                        Name         = AppResources.PasswordAutofill,
                        ExecuteAsync = () => Page.Navigation.PushModalAsync(new NavigationPage(new AutofillPage()))
                    });
                }
                autofillItems.Add(new SettingsPageListItem
                {
                    Name         = AppResources.AppExtension,
                    ExecuteAsync = () => Page.Navigation.PushModalAsync(new NavigationPage(new ExtensionPage()))
                });
            }
            var manageItems = new List <SettingsPageListItem>
            {
                new SettingsPageListItem
                {
                    Name         = AppResources.Folders,
                    ExecuteAsync = () => Page.Navigation.PushModalAsync(new NavigationPage(new FoldersPage()))
                },
                new SettingsPageListItem
                {
                    Name         = AppResources.Sync,
                    SubLabel     = _lastSyncDate,
                    ExecuteAsync = () => Page.Navigation.PushModalAsync(new NavigationPage(new SyncPage()))
                }
            };
            var securityItems = new List <SettingsPageListItem>
            {
                new SettingsPageListItem
                {
                    Name         = AppResources.VaultTimeout,
                    SubLabel     = _vaultTimeoutDisplayValue,
                    ExecuteAsync = () => VaultTimeoutAsync()
                },
                new SettingsPageListItem
                {
                    Name         = AppResources.VaultTimeoutAction,
                    SubLabel     = _vaultTimeoutActionDisplayValue,
                    ExecuteAsync = () => VaultTimeoutActionAsync()
                },
                new SettingsPageListItem
                {
                    Name         = AppResources.UnlockWithPIN,
                    SubLabel     = _pin ? AppResources.On : AppResources.Off,
                    ExecuteAsync = () => UpdatePinAsync()
                },
                new SettingsPageListItem
                {
                    Name         = AppResources.LockNow,
                    ExecuteAsync = () => LockAsync()
                },
                new SettingsPageListItem
                {
                    Name         = AppResources.TwoStepLogin,
                    ExecuteAsync = () => TwoStepAsync()
                }
            };

            if (_supportsBiometric || _biometric)
            {
                var biometricName = AppResources.Biometrics;
                if (Device.RuntimePlatform == Device.iOS)
                {
                    biometricName = _deviceActionService.SupportsFaceBiometric() ? AppResources.FaceID :
                                    AppResources.TouchID;
                }
                var item = new SettingsPageListItem
                {
                    Name         = string.Format(AppResources.UnlockWith, biometricName),
                    SubLabel     = _biometric ? AppResources.On : AppResources.Off,
                    ExecuteAsync = () => UpdateBiometricAsync()
                };
                securityItems.Insert(2, item);
            }
            if (_vaultTimeoutDisplayValue == AppResources.Custom)
            {
                securityItems.Insert(1, new SettingsPageListItem
                {
                    Name = AppResources.Custom,
                    Time = TimeSpan.FromMinutes(Math.Abs((double)_vaultTimeout.GetValueOrDefault())),
                });
            }
            if (_vaultTimeoutPolicy != null)
            {
                var maximumTimeout = _policyService.GetPolicyInt(_vaultTimeoutPolicy, "minutes").GetValueOrDefault();
                securityItems.Insert(0, new SettingsPageListItem
                {
                    Name = string.Format(AppResources.VaultTimeoutPolicyInEffect,
                                         Math.Floor((float)maximumTimeout / 60),
                                         maximumTimeout % 60),
                    UseFrame = true,
                });
            }
            if (Device.RuntimePlatform == Device.Android)
            {
                securityItems.Add(new SettingsPageListItem
                {
                    Name         = AppResources.AllowScreenCapture,
                    SubLabel     = _screenCaptureAllowed ? AppResources.On : AppResources.Off,
                    ExecuteAsync = () => SetScreenCaptureAllowedAsync()
                });
            }
            var accountItems = new List <SettingsPageListItem>
            {
                new SettingsPageListItem
                {
                    Name         = AppResources.FingerprintPhrase,
                    ExecuteAsync = () => FingerprintAsync()
                },
                new SettingsPageListItem
                {
                    Name         = AppResources.LogOut,
                    ExecuteAsync = () => LogOutAsync()
                }
            };

            if (_showChangeMasterPassword)
            {
                accountItems.Insert(0, new SettingsPageListItem
                {
                    Name         = AppResources.ChangeMasterPassword,
                    ExecuteAsync = () => ChangePasswordAsync()
                });
            }
            var toolsItems = new List <SettingsPageListItem>
            {
                new SettingsPageListItem
                {
                    Name         = AppResources.ImportItems,
                    ExecuteAsync = () => Device.InvokeOnMainThreadAsync(() => Import())
                },
                new SettingsPageListItem
                {
                    Name         = AppResources.ExportVault,
                    ExecuteAsync = () => Page.Navigation.PushModalAsync(new NavigationPage(new ExportVaultPage()))
                }
            };

            if (IncludeLinksWithSubscriptionInfo())
            {
                toolsItems.Add(new SettingsPageListItem
                {
                    Name         = AppResources.LearnOrg,
                    ExecuteAsync = () => ShareAsync()
                });
                toolsItems.Add(new SettingsPageListItem
                {
                    Name         = AppResources.WebVault,
                    ExecuteAsync = () => Device.InvokeOnMainThreadAsync(() => WebVault())
                });
            }

            var otherItems = new List <SettingsPageListItem>
            {
                new SettingsPageListItem
                {
                    Name         = AppResources.Options,
                    ExecuteAsync = () => Page.Navigation.PushModalAsync(new NavigationPage(new OptionsPage()))
                },
                new SettingsPageListItem
                {
                    Name         = AppResources.About,
                    ExecuteAsync = () => AboutAsync()
                },
                new SettingsPageListItem
                {
                    Name         = AppResources.HelpAndFeedback,
                    ExecuteAsync = () => Device.InvokeOnMainThreadAsync(() => Help())
                },
#if !FDROID
                new SettingsPageListItem
                {
                    Name         = AppResources.SubmitCrashLogs,
                    SubLabel     = _reportLoggingEnabled ? AppResources.On : AppResources.Off,
                    ExecuteAsync = () => LoggerReportingAsync()
                },
#endif
                new SettingsPageListItem
                {
                    Name         = AppResources.RateTheApp,
                    ExecuteAsync = () => Device.InvokeOnMainThreadAsync(() => Rate())
                },
                new SettingsPageListItem
                {
                    Name         = AppResources.DeleteAccount,
                    ExecuteAsync = () => Page.Navigation.PushModalAsync(new NavigationPage(new DeleteAccountPage()))
                }
            };

            // TODO: improve this. Leaving this as is to reduce error possibility on the hotfix.
            var settingsListGroupItems = new List <SettingsPageListGroup>()
            {
                new SettingsPageListGroup(autofillItems, AppResources.Autofill, doUpper, true),
                new SettingsPageListGroup(manageItems, AppResources.Manage, doUpper),
                new SettingsPageListGroup(securityItems, AppResources.Security, doUpper),
                new SettingsPageListGroup(accountItems, AppResources.Account, doUpper),
                new SettingsPageListGroup(toolsItems, AppResources.Tools, doUpper),
                new SettingsPageListGroup(otherItems, AppResources.Other, doUpper)
            };

            // TODO: refactor this
            if (Device.RuntimePlatform == Device.Android
                ||
                GroupedItems.Any())
            {
                var items = new List <ISettingsPageListItem>();
                foreach (var itemGroup in settingsListGroupItems)
                {
                    items.Add(new SettingsPageHeaderListItem(itemGroup.Name));
                    items.AddRange(itemGroup);
                }

                GroupedItems.ReplaceRange(items);
            }
            else
            {
                // HACK: we need this on iOS, so that it doesn't crash when adding coming from an empty list
                var first = true;
                var items = new List <ISettingsPageListItem>();
                foreach (var itemGroup in settingsListGroupItems)
                {
                    if (!first)
                    {
                        items.Add(new SettingsPageHeaderListItem(itemGroup.Name));
                    }
                    else
                    {
                        first = false;
                    }
                    items.AddRange(itemGroup);
                }

                if (settingsListGroupItems.Any())
                {
                    GroupedItems.ReplaceRange(new List <ISettingsPageListItem> {
                        new SettingsPageHeaderListItem(settingsListGroupItems[0].Name)
                    });
                    GroupedItems.AddRange(items);
                }
                else
                {
                    GroupedItems.Clear();
                }
            }
        }