1
0
mirror of https://github.com/bitwarden/mobile synced 2026-01-10 12:33:28 +00:00

[EC-325] Settings option to allow screen capture on Android (#1914)

* settings option to allow screen capture on Android

* Improved code on Screen Capture and added prompt to the user to allow screen capture

* EC-325 Removed async on OnCreate of MainActivity given that's not necessary anymore

Co-authored-by: Federico Maccaroni <fedemkr@gmail.com>
This commit is contained in:
Pedro da Rocha Pires
2022-07-15 16:13:10 +01:00
committed by GitHub
parent cb0c52fb26
commit cf222bd0c3
13 changed files with 5991 additions and 3843 deletions

View File

@@ -148,6 +148,8 @@ namespace Bit.Core.Abstractions
Task SetRefreshTokenAsync(string value, bool skipTokenStorage, string userId = null);
Task<string> GetTwoFactorTokenAsync(string email = null);
Task SetTwoFactorTokenAsync(string value, string email = null);
Task<bool> GetScreenCaptureAllowedAsync(string userId = null);
Task SetScreenCaptureAllowedAsync(bool value, string userId = null);
Task SaveExtensionActiveUserIdToStorageAsync(string userId);
}
}

View File

@@ -94,11 +94,13 @@ namespace Bit.Core.Models.Domain
EnvironmentUrls = copy.EnvironmentUrls;
VaultTimeout = copy.VaultTimeout;
VaultTimeoutAction = copy.VaultTimeoutAction;
ScreenCaptureAllowed = copy.ScreenCaptureAllowed;
}
public EnvironmentUrlData EnvironmentUrls;
public int? VaultTimeout;
public VaultTimeoutAction? VaultTimeoutAction;
public bool ScreenCaptureAllowed;
}
public class AccountVolatileData

View File

@@ -191,7 +191,7 @@ namespace Bit.Core.Services
EnvironmentUrls = environmentUrls,
VaultTimeout = vaultTimeout,
VaultTimeoutAction =
vaultTimeoutAction == "logout" ? VaultTimeoutAction.Logout : VaultTimeoutAction.Lock,
vaultTimeoutAction == "logout" ? VaultTimeoutAction.Logout : VaultTimeoutAction.Lock
};
var state = new State { Accounts = new Dictionary<string, Account> { [userId] = account } };
state.ActiveUserId = userId;

View File

@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Bit.Core.Abstractions;
@@ -558,6 +559,27 @@ namespace Bit.Core.Services
await SaveAccountAsync(account, reconciledOptions);
}
public async Task<bool> GetScreenCaptureAllowedAsync(string userId = null)
{
if (CoreHelpers.ForceScreenCaptureEnabled())
{
return true;
}
return (await GetAccountAsync(
ReconcileOptions(new StorageOptions { UserId = userId }, await GetDefaultStorageOptionsAsync())
))?.Settings?.ScreenCaptureAllowed ?? false;
}
public async Task SetScreenCaptureAllowedAsync(bool value, string userId = null)
{
var reconciledOptions = ReconcileOptions(new StorageOptions { UserId = userId },
await GetDefaultStorageOptionsAsync());
var account = await GetAccountAsync(reconciledOptions);
account.Settings.ScreenCaptureAllowed = value;
await SaveAccountAsync(account, reconciledOptions);
}
public async Task<DateTime?> GetLastFileCacheClearAsync()
{
var options = await GetDefaultStorageOptionsAsync();
@@ -1461,6 +1483,7 @@ namespace Bit.Core.Services
var existingAccount = state.Accounts[account.Profile.UserId];
account.Settings.VaultTimeout = existingAccount.Settings.VaultTimeout;
account.Settings.VaultTimeoutAction = existingAccount.Settings.VaultTimeoutAction;
account.Settings.ScreenCaptureAllowed = existingAccount.Settings.ScreenCaptureAllowed;
}
// New account defaults

View File

@@ -34,6 +34,25 @@ namespace Bit.Core.Utilities
#endif
}
/// <summary>
/// Returns whether to force enabling the screen capture.
/// On Debug it will allow screen capture by default but this method
/// makes it easier to test the change on enabling/disabling the feature
/// on debug.
/// </summary>
/// <remarks>
/// To test enabling/disabling in DEBUG, just return <c>false</c> in the #if condition
/// and that's it.
/// </remarks>
public static bool ForceScreenCaptureEnabled()
{
#if DEBUG
return true;
#else
return false;
#endif
}
public static string GetHostname(string uriString)
{
var uri = GetUri(uriString);