mirror of
https://github.com/bitwarden/mobile
synced 2025-12-05 23:53:33 +00:00
* [PM-2658] Settings Reorganization Init (#2697) * PM-2658 Started settings reorganization (settings main + vault + about) * PM-2658 Added settings controls based on templates and implemented OtherSettingsPage * PM-2658 Fix format * [PM-3512] Settings Appearance (#2703) * PM-3512 Implemented new Appearance Settings * PM-3512 Fix format * [PM-3510] Implement Account Security Settings view (#2714) * PM-3510 Implemented Security settings view * PM-3510 Fix format * PM-3510 Added empty placeholder to pending login requests and also improved a11y on security settings view. * PM-3511 Implemented autofill settings view (#2735) * [PM-3695] Add Connect to Watch to Other settings (#2736) * PM-3511 Implemented autofill settings view * PM-3695 Add Connect to watch setting to other settings view * [PM-3693] Clear old Settings approach (#2737) * PM-3511 Implemented autofill settings view * PM-3693 Remove old Settings approach * PM-3845 Fix default dark theme description verbiage (#2759) * PM-3839 Fix allow screen capture and submit crash logs to init their state when the page appears (#2760) * PM-3834 Fix dialogs strings on settings (#2758) * [PM-3834] Fix import items link (#2782) * PM-3834 Fix import items link * PM-3834 Fix import items link, removed old link. * [PM-4092] Fix vault timeout policies on new Settings (#2796) * PM-4092 Fix vault timeout policy on settings for disabling controls and reset timeout when surpassing maximum * PM-4092 Removed testing hardcoding of policy data
182 lines
6.6 KiB
C#
182 lines
6.6 KiB
C#
using System.Threading.Tasks;
|
|
using System.Windows.Input;
|
|
using Bit.App.Resources;
|
|
using Xamarin.CommunityToolkit.ObjectModel;
|
|
using Xamarin.Essentials;
|
|
using Xamarin.Forms;
|
|
|
|
namespace Bit.App.Pages
|
|
{
|
|
public partial class AutofillSettingsPageViewModel
|
|
{
|
|
private bool _useAutofillServices;
|
|
private bool _useInlineAutofill;
|
|
private bool _useAccessibility;
|
|
private bool _useDrawOver;
|
|
private bool _askToAddLogin;
|
|
|
|
public bool SupportsAndroidAutofillServices => Device.RuntimePlatform == Device.Android && _deviceActionService.SupportsAutofillServices();
|
|
|
|
public bool UseAutofillServices
|
|
{
|
|
get => _useAutofillServices;
|
|
set
|
|
{
|
|
if (SetProperty(ref _useAutofillServices, value))
|
|
{
|
|
((ICommand)ToggleUseAutofillServicesCommand).Execute(null);
|
|
}
|
|
}
|
|
}
|
|
|
|
public bool ShowUseInlineAutofillToggle => _deviceActionService.SupportsInlineAutofill();
|
|
|
|
public bool UseInlineAutofill
|
|
{
|
|
get => _useInlineAutofill;
|
|
set
|
|
{
|
|
if (SetProperty(ref _useInlineAutofill, value))
|
|
{
|
|
((ICommand)ToggleUseInlineAutofillCommand).Execute(null);
|
|
}
|
|
}
|
|
}
|
|
|
|
public bool ShowUseAccessibilityToggle => Device.RuntimePlatform == Device.Android;
|
|
|
|
public string UseAccessibilityDescription => _deviceActionService.GetAutofillAccessibilityDescription();
|
|
|
|
public bool UseAccessibility
|
|
{
|
|
get => _useAccessibility;
|
|
set
|
|
{
|
|
if (SetProperty(ref _useAccessibility, value))
|
|
{
|
|
((ICommand)ToggleUseAccessibilityCommand).Execute(null);
|
|
}
|
|
}
|
|
}
|
|
|
|
public bool ShowUseDrawOverToggle => _deviceActionService.SupportsDrawOver();
|
|
|
|
public bool UseDrawOver
|
|
{
|
|
get => _useDrawOver;
|
|
set
|
|
{
|
|
if (SetProperty(ref _useDrawOver, value))
|
|
{
|
|
((ICommand)ToggleUseDrawOverCommand).Execute(null);
|
|
}
|
|
}
|
|
}
|
|
|
|
public string UseDrawOverDescription => _deviceActionService.GetAutofillDrawOverDescription();
|
|
|
|
public bool AskToAddLogin
|
|
{
|
|
get => _askToAddLogin;
|
|
set
|
|
{
|
|
if (SetProperty(ref _askToAddLogin, value))
|
|
{
|
|
((ICommand)ToggleAskToAddLoginCommand).Execute(null);
|
|
}
|
|
}
|
|
}
|
|
|
|
public AsyncCommand ToggleUseAutofillServicesCommand { get; private set; }
|
|
public AsyncCommand ToggleUseInlineAutofillCommand { get; private set; }
|
|
public AsyncCommand ToggleUseAccessibilityCommand { get; private set; }
|
|
public AsyncCommand ToggleUseDrawOverCommand { get; private set; }
|
|
public AsyncCommand ToggleAskToAddLoginCommand { get; private set; }
|
|
public ICommand GoToBlockAutofillUrisCommand { get; private set; }
|
|
|
|
private void InitAndroidCommands()
|
|
{
|
|
ToggleUseAutofillServicesCommand = CreateDefaultAsyncCommnad(() => MainThread.InvokeOnMainThreadAsync(() => ToggleUseAutofillServices()), _ => _inited);
|
|
ToggleUseInlineAutofillCommand = CreateDefaultAsyncCommnad(() => MainThread.InvokeOnMainThreadAsync(() => ToggleUseInlineAutofillEnabledAsync()), _ => _inited);
|
|
ToggleUseAccessibilityCommand = CreateDefaultAsyncCommnad(ToggleUseAccessibilityAsync, _ => _inited);
|
|
ToggleUseDrawOverCommand = CreateDefaultAsyncCommnad(() => MainThread.InvokeOnMainThreadAsync(() => ToggleDrawOver()), _ => _inited);
|
|
ToggleAskToAddLoginCommand = CreateDefaultAsyncCommnad(ToggleAskToAddLoginAsync, _ => _inited);
|
|
GoToBlockAutofillUrisCommand = CreateDefaultAsyncCommnad(() => Page.Navigation.PushAsync(new BlockAutofillUrisPage()));
|
|
}
|
|
|
|
private async Task InitAndroidAutofillSettingsAsync()
|
|
{
|
|
_useInlineAutofill = await _stateService.GetInlineAutofillEnabledAsync() ?? true;
|
|
|
|
await UpdateAndroidAutofillSettingsAsync();
|
|
|
|
await MainThread.InvokeOnMainThreadAsync(() =>
|
|
{
|
|
TriggerPropertyChanged(nameof(UseInlineAutofill));
|
|
});
|
|
}
|
|
|
|
private async Task UpdateAndroidAutofillSettingsAsync()
|
|
{
|
|
_useAutofillServices =
|
|
_autofillHandler.SupportsAutofillService() && _autofillHandler.AutofillServiceEnabled();
|
|
_useAccessibility = _autofillHandler.AutofillAccessibilityServiceRunning();
|
|
_useDrawOver = _autofillHandler.AutofillAccessibilityOverlayPermitted();
|
|
_askToAddLogin = await _stateService.GetAutofillDisableSavePromptAsync() != true;
|
|
|
|
await MainThread.InvokeOnMainThreadAsync(() =>
|
|
{
|
|
TriggerPropertyChanged(nameof(UseAutofillServices));
|
|
TriggerPropertyChanged(nameof(UseAccessibility));
|
|
TriggerPropertyChanged(nameof(UseDrawOver));
|
|
TriggerPropertyChanged(nameof(AskToAddLogin));
|
|
});
|
|
}
|
|
|
|
private void ToggleUseAutofillServices()
|
|
{
|
|
if (UseAutofillServices)
|
|
{
|
|
_deviceActionService.OpenAutofillSettings();
|
|
}
|
|
else
|
|
{
|
|
_autofillHandler.DisableAutofillService();
|
|
}
|
|
}
|
|
|
|
private async Task ToggleUseInlineAutofillEnabledAsync()
|
|
{
|
|
await _stateService.SetInlineAutofillEnabledAsync(UseInlineAutofill);
|
|
}
|
|
|
|
private async Task ToggleUseAccessibilityAsync()
|
|
{
|
|
if (!_autofillHandler.AutofillAccessibilityServiceRunning()
|
|
&&
|
|
!await _platformUtilsService.ShowDialogAsync(AppResources.AccessibilityDisclosureText, AppResources.AccessibilityServiceDisclosure,
|
|
AppResources.Accept, AppResources.Decline))
|
|
{
|
|
_useAccessibility = false;
|
|
await MainThread.InvokeOnMainThreadAsync(() => TriggerPropertyChanged(nameof(UseAccessibility)));
|
|
return;
|
|
}
|
|
_deviceActionService.OpenAccessibilitySettings();
|
|
}
|
|
|
|
private void ToggleDrawOver()
|
|
{
|
|
if (!UseAccessibility)
|
|
{
|
|
return;
|
|
}
|
|
_deviceActionService.OpenAccessibilityOverlayPermissionSettings();
|
|
}
|
|
|
|
private async Task ToggleAskToAddLoginAsync()
|
|
{
|
|
await _stateService.SetAutofillDisableSavePromptAsync(!AskToAddLogin);
|
|
}
|
|
}
|
|
}
|