kr=H9(ubtS!+}^59o$
zNwhJ=M`zW_%|qer+BMm5s7+C$F1IFHWDE!RlP#j=c12Y+9SUdHtbK^#vmgepQw)o5
z9s??^CG!@L!Dt1H_~6Xp0N!bNTYcc$?^KaPf%-N?s0)N2Tv}xGe=#qyZ{Q!)U{F$@!Y_%a-8w@4~hBv#cT**K12S*xUf
z&)uRO2A31IimGhYtg>4WL{1b0w`}!Ut%^mz;B>(slE)yR(S|v)X%f8gmZDjp(G>uj
z!51p8Kg#(2@kbfM8_1YBf}HhB^PF9n**wY_c2dqpWZpIRXYA|js8MXhNC#%rvAB^H
zi!^sH_&N%)ypa!Uyu$l1bVT9^sdR`~B=CZfWjDp(rhd6A*~h%wm+aCn`%C_qq)ITT
zIJIiO=2T#CISk@@wIA1E&|k9QvVIwtnRjtnzdU*`@$$=wdmc|#5bilzTOIe<3-h49
z2N0V2HIXUy7V{Hgs~DwGT)>LLJOVTsg`IgmV0_Q6_P+p8X9oWfpib
zUmj~kQvjeD)eMzR#V5k=zO&5w!MBxvROI}8_@@k(kqu-Uc@8TuBjRI>rcpzo5uNHA
zQ%>U@q(R>Z7Fwq!HqpO|gJ!oFapDE@;nXmfGUJhkCWwVsa2JhuukE-^i+j6@er*x;{dpy~<6<|wW
za+#*=Fd6#lVQFOlVjH~}!&vt$Gy9>M~N$fP`9)F`BZBuRlRC9BD^CT7Y8XT?l%>HwDvO|eEAP3u{T3!h7(Qo*cLl!B@noTk+wwo~){JH`wl
z!`}o{%P8WubS{@}>-DOIWucy-p&p$CGAfRi6=q-tOHZs{TSI~{^q0-iXx8b3DW@|V
zjUF?~U_$@Hgw-RqRw(gS(PPCxtWQ2*`Jgu{R>Vks6Tqy^qG@?m)!W{2Fnzj-aTba)18-qPl!@|gKw{qLsx4p3K
zzqjAm{>6^{J1*@!F*-c@^ReNl<4=D!e)D_zUBBKvwEOO!kN4i1IIu6j?|=4x@XXYK
zT?ei{>v{HzgQpMOcy7~k_n*HrdGTqJG
zdyZc`5jk<|r0-;G&B^JLpPs5Y)qk2f{k!SN^rq=)ln;GruCNZ`!5+nT{+9tzuD|7n
HF6RFLuan#I
delta 1877
zcmZ`(Z%k8H6u;-**Y{rgUi)65EmauMRvr!%DYQiq8MsBA0d-q|{ZRq=*J)KIis+oJ
zhA~_gn5P%CgPK77byEAB;1R`N1t)qGm%snCwsX!AxT|c
zoO|v$zxz9H>>79T9CySQ{gDtzBZRDPsc&n=Sw*=6XR#%+r+M_mMij2qmj2~ZwId0u$y&W=qVI>u2RCxnJ0+Z*cJhl4!?+^f(>Xls2(EBTzM
z1m?uhK66|B)+XN(S3t*&kMTfS>-M&tgrN#jN8dl+3q8FRkP4@V!|-K^J98>ZZ?PCD
zN40|&zy<<#uh#qP_o>l5C<=s%N+Hox3S24akOJx8^wV34RX<8ij0%kL*eT^GPyj|D
z%nJgq_fcG8qrfqW7705Og@{#ws8dt*8patXurZ3Brrj8xU`Vi=%}G3@e`Xxy8Hb~Z
zQf8RqB^=YMRn19;x0I?`Q6PhCiq?`KAz5B68}cAK4}#jmunR-8VHXyJil7t{c?gMY
zeSS(D*@|906aW7PW3dY`WRiJa;y4aWCcRq8b`ILC5T@miLtwbjj~XCAgk!*)I6NtH
zdY{#X&w;-f(`k%&NoYFc_&0MPJ?itD5!jgsgC&sdu|W#PmXd4NBW8&)Oxr4&9Tv7*
za)@Rt<0xa2S>IyMNztE$KC@GjoFaUH08Mmpz+$QbwL-Eaxhxht&kG#S^LC5mlB8ro
zA5c~JLLU@FQGf=Z6!0ZDfeq(3R^~@zjIjO0M~VqCA)pC7*(?uc8So!hSPlsGbTEJo
z2Bz`%X*^yQ8;==)e{N_hK#}?!=qzU3!~apj9tglcaT-2nY0m-Y3Los8>`#j8!W*&Rg
zford(dE9Kd+oLL-*36{I7Pp73MPiGZAgl7^bsPjuloGN8H)U1i@msKG@)J?IBT6n+
zQ(cniG%WO(T^8VmEa-~`nXR1I;r4jk^sXbz)-G8+?tUh4lWPq_SR*NlqzBF#0!uT-
zZ)H`LuLvTgkxEG%lEexnB}J()RB=(7JPaOD(#KF7{`#LX$GNHuc!{OS>t6k+Rw=nh
zBo05Wg!~fuu6K5hU-V*09E(qQAqtuCeLh%e0yLxX%RczsEOKP(9!DS}J~|KDK#S*R
zL2kS^3sy(J%IMF0FY}J)vhVP`uB;BNKbPd5SkS*PY2nqp&P9>@Zhx`A$Nxvc@`Aqu
z1%Z)ZQt(cZw`g?ni;FKTIkx2I;#jf1^kj*5SxzbU%=|J(*+h9y`Jd0NSW&XFW7V1G
zH?CG!x2`@_kyBYxd1=jxHTTz^S~v27RyDWkcujlFUoT&XzHhg^K==AX
feTT;0rHC8g{}?mdNRj~}BISP?lFub)!xH*0ij8qg
diff --git a/src/iOS/Resources/bwi-font.ttf b/src/iOS/Resources/bwi-font.ttf
index 7c7afd4cdb9d110404b67ba3e8cd89d95151c138..f9b63283e0465ea0285ac022a2aa1540746d3d60 100644
GIT binary patch
delta 5923
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
EZ&78Iga7~l
From 9eda01537168ba8a3a09a56995e2a9025c058208 Mon Sep 17 00:00:00 2001
From: Federico Maccaroni
Date: Thu, 27 Jul 2023 17:49:52 -0300
Subject: [PATCH 5/6] PM-3165 Finish task completion source when cancelling the
dialog tapping on the background. (#2647)
---
src/Android/Services/DeviceActionService.cs | 23 +++++++++++++++------
1 file changed, 17 insertions(+), 6 deletions(-)
diff --git a/src/Android/Services/DeviceActionService.cs b/src/Android/Services/DeviceActionService.cs
index 4f843eb55..dd1b8f1b6 100644
--- a/src/Android/Services/DeviceActionService.cs
+++ b/src/Android/Services/DeviceActionService.cs
@@ -3,7 +3,6 @@ using System.Threading.Tasks;
using Android.App;
using Android.Content;
using Android.Content.PM;
-using Android.Media;
using Android.Nfc;
using Android.OS;
using Android.Provider;
@@ -18,14 +17,9 @@ using Bit.App.Utilities;
using Bit.App.Utilities.Prompts;
using Bit.Core.Abstractions;
using Bit.Core.Enums;
-using Bit.Core.Utilities;
using Bit.Droid.Utilities;
using Plugin.CurrentActivity;
using Xamarin.Forms.Platform.Android;
-using static Android.Icu.Text.CaseMap;
-using static Android.Renderscripts.ScriptGroup;
-using static Android.Util.EventLogTags;
-using static Bit.App.Pages.SettingsPageViewModel;
namespace Bit.Droid.Services
{
@@ -267,6 +261,7 @@ namespace Bit.Droid.Services
var result = new TaskCompletionSource();
+ alertBuilder.SetOnCancelListener(new BasicDialogWithResultCancelListener(result));
alertBuilder.SetPositiveButton(config.OkButtonText ?? AppResources.Ok, listener: null);
alertBuilder.SetNegativeButton(config.CancelButtonText ?? AppResources.Cancel, (sender, args) => result.TrySetResult(null));
if (!string.IsNullOrEmpty(config.ThirdButtonText))
@@ -614,4 +609,20 @@ namespace Bit.Droid.Services
#pragma warning restore CS0618 // Type or member is obsolete
}
}
+
+ class BasicDialogWithResultCancelListener : Java.Lang.Object, IDialogInterfaceOnCancelListener
+ {
+ private readonly TaskCompletionSource _taskCompletionSource;
+
+ public BasicDialogWithResultCancelListener(TaskCompletionSource taskCompletionSource)
+ {
+ _taskCompletionSource = taskCompletionSource;
+ }
+
+ public void OnCancel(IDialogInterface dialog)
+ {
+ _taskCompletionSource?.TrySetResult(null);
+ dialog?.Dismiss();
+ }
+ }
}
From 375718f94521dceebc39a71202919213f814f206 Mon Sep 17 00:00:00 2001
From: Federico Maccaroni
Date: Thu, 27 Jul 2023 18:35:09 -0300
Subject: [PATCH 6/6] PM-3227 Avoid clone on discoverable passkeys. (#2648)
---
src/App/Pages/Vault/CipherDetailsPage.xaml.cs | 12 ++++++++----
src/App/Pages/Vault/CipherDetailsPageViewModel.cs | 7 +++++++
src/Core/Models/View/CipherView.cs | 2 ++
3 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/src/App/Pages/Vault/CipherDetailsPage.xaml.cs b/src/App/Pages/Vault/CipherDetailsPage.xaml.cs
index d0566fe96..4fac27e6d 100644
--- a/src/App/Pages/Vault/CipherDetailsPage.xaml.cs
+++ b/src/App/Pages/Vault/CipherDetailsPage.xaml.cs
@@ -204,7 +204,7 @@ namespace Bit.App.Pages
}
}
- private async void More_Clicked(object sender, System.EventArgs e)
+ private async void More_Clicked(object sender, EventArgs e)
{
if (!DoOnce())
{
@@ -214,7 +214,11 @@ namespace Bit.App.Pages
var options = new List { AppResources.Attachments };
if (_vm.Cipher.OrganizationId == null)
{
- options.Add(AppResources.Clone);
+ if (_vm.CanClone)
+ {
+ options.Add(AppResources.Clone);
+ }
+
options.Add(AppResources.MoveToOrganization);
}
else
@@ -288,13 +292,13 @@ namespace Bit.App.Pages
{
ToolbarItems.Remove(_collectionsItem);
}
- if (_vm.Cipher.Type != Core.Enums.CipherType.Fido2Key && !ToolbarItems.Contains(_cloneItem))
+ if (_vm.CanClone && !ToolbarItems.Contains(_cloneItem))
{
ToolbarItems.Insert(1, _cloneItem);
}
if (!ToolbarItems.Contains(_shareItem))
{
- ToolbarItems.Insert(_vm.Cipher.Type == Core.Enums.CipherType.Fido2Key ? 1 : 2, _shareItem);
+ ToolbarItems.Insert(_vm.CanClone ? 2 : 1, _shareItem);
}
}
else
diff --git a/src/App/Pages/Vault/CipherDetailsPageViewModel.cs b/src/App/Pages/Vault/CipherDetailsPageViewModel.cs
index d58143e23..0336ea4ea 100644
--- a/src/App/Pages/Vault/CipherDetailsPageViewModel.cs
+++ b/src/App/Pages/Vault/CipherDetailsPageViewModel.cs
@@ -249,6 +249,7 @@ namespace Bit.App.Pages
public double TotpProgress => string.IsNullOrEmpty(TotpSec) ? 0 : double.Parse(TotpSec) * 100 / _totpInterval;
public bool IsDeleted => Cipher.IsDeleted;
public bool CanEdit => !Cipher.IsDeleted;
+ public bool CanClone => Cipher.IsClonable;
public async Task LoadAsync(Action finishedLoadingAction = null)
{
@@ -707,6 +708,12 @@ namespace Bit.App.Pages
private async Task CanCloneAsync()
{
+ if (Cipher.Type == CipherType.Fido2Key)
+ {
+ await _platformUtilsService.ShowDialogAsync(AppResources.PasskeyWillNotBeCopied);
+ return false;
+ }
+
if (Cipher.Type == CipherType.Login && Cipher.Login?.Fido2Key != null)
{
return await _platformUtilsService.ShowDialogAsync(AppResources.ThePasskeyWillNotBeCopiedToTheClonedItemDoYouWantToContinueCloningThisItem, AppResources.PasskeyWillNotBeCopied, AppResources.Yes, AppResources.No);
diff --git a/src/Core/Models/View/CipherView.cs b/src/Core/Models/View/CipherView.cs
index a29ebb38c..8e2202847 100644
--- a/src/Core/Models/View/CipherView.cs
+++ b/src/Core/Models/View/CipherView.cs
@@ -120,5 +120,7 @@ namespace Bit.Core.Models.View
public bool CanLaunch => Login?.CanLaunch == true || Fido2Key?.CanLaunch == true;
public string LaunchUri => Login?.LaunchUri ?? Fido2Key?.LaunchUri;
+
+ public bool IsClonable => OrganizationId is null && Type != CipherType.Fido2Key;
}
}