add button to scan QR code for TOTP setup in the "setup TOTP" dialog. Closes https://github.com/PhilippC/keepass2android/issues/1575
This commit is contained in:
@@ -39,11 +39,15 @@ using Android.Content.Res;
|
||||
using Android.Database;
|
||||
using Android.Graphics;
|
||||
using Android.Graphics.Drawables;
|
||||
using Android.Runtime;
|
||||
using Android.Util;
|
||||
using keepass2android.Io;
|
||||
using KeePassLib.Serialization;
|
||||
using KeeTrayTOTP.Libraries;
|
||||
using PluginTOTP;
|
||||
using Xamarin.Essentials;
|
||||
using Xamarin.Forms.Platform.Android;
|
||||
using ZXing.Mobile;
|
||||
using Debug = System.Diagnostics.Debug;
|
||||
using File = System.IO.File;
|
||||
using Object = Java.Lang.Object;
|
||||
@@ -1113,8 +1117,8 @@ namespace keepass2android
|
||||
private string[] _additionalKeys = null;
|
||||
private List<View> _editModeHiddenViews;
|
||||
private Uri _uriToAddOrAsk;
|
||||
|
||||
public string[] AdditionalKeys
|
||||
|
||||
public string[] AdditionalKeys
|
||||
{
|
||||
get
|
||||
{
|
||||
@@ -1177,6 +1181,25 @@ namespace keepass2android
|
||||
dlgView.FindViewById(Resource.Id.totp_custom_settings_group).Visibility = args.IsChecked ? ViewStates.Visible : ViewStates.Gone;
|
||||
};
|
||||
|
||||
dlgView.FindViewById<Button>(Resource.Id.totp_scan).Click += async (object o, EventArgs args) =>
|
||||
{
|
||||
var scanner = new ZXing.Mobile.MobileBarcodeScanner();
|
||||
var options = new ZXing.Mobile.MobileBarcodeScanningOptions();
|
||||
options.PossibleFormats = new List<ZXing.BarcodeFormat>() { ZXing.BarcodeFormat.QR_CODE };
|
||||
|
||||
var result = await scanner.Scan(options);
|
||||
if (result?.Text?.StartsWith("otpauth://") == true)
|
||||
{
|
||||
dialog.Dismiss();
|
||||
var targetField = ((TextView)((View)sender.Parent).FindViewById(Resource.Id.value));
|
||||
targetField.Text = result.Text;
|
||||
}
|
||||
else
|
||||
{
|
||||
Toast.MakeText(this, "Scanned code should contain an otpauth:// text.", ToastLength.Long).Show();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
//copy values from entry into dialog
|
||||
View ees = (View)sender.Parent;
|
||||
@@ -1208,14 +1231,22 @@ namespace keepass2android
|
||||
|
||||
_passwordFont.ApplyTo(dlgView.FindViewById<EditText>(Resource.Id.totp_secret_key));
|
||||
Util.SetNoPersonalizedLearning(dlgView);
|
||||
|
||||
|
||||
|
||||
dialog.Show();
|
||||
|
||||
}
|
||||
|
||||
string SanitizeInput(string encodedData)
|
||||
|
||||
|
||||
|
||||
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
|
||||
{
|
||||
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||
|
||||
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||
}
|
||||
|
||||
string SanitizeInput(string encodedData)
|
||||
{
|
||||
if (encodedData.Length <= 0)
|
||||
{
|
||||
|
@@ -63,6 +63,14 @@
|
||||
android:hint="@string/totp_length"
|
||||
android:id="@+id/totp_length" />
|
||||
|
||||
<Button
|
||||
android:drawableLeft="@android:drawable/ic_menu_camera"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/totp_scan"
|
||||
android:id="@+id/totp_scan"
|
||||
/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
|
@@ -386,6 +386,7 @@
|
||||
<string name="totp_encoding_custom">Custom token settings</string>
|
||||
<string name="totp_time_step">Time step</string>
|
||||
<string name="totp_length">Code length</string>
|
||||
<string name="totp_scan">Scan QR code</string>
|
||||
|
||||
<string name="delete_extra_string">Delete additional string</string>
|
||||
<string name="database_loaded_quickunlock_enabled">%1$s: Locked. QuickUnlock enabled.</string>
|
||||
|
@@ -1230,7 +1230,11 @@ namespace keepass2android
|
||||
intentFilter.AddAction(Intents.LockDatabaseByTimeout);
|
||||
intentFilter.AddAction(Intents.CloseDatabase);
|
||||
Context.RegisterReceiver(broadcastReceiver, intentFilter);
|
||||
}
|
||||
|
||||
|
||||
Xamarin.Essentials.Platform.Init(this);
|
||||
ZXing.Net.Mobile.Forms.Android.Platform.Init();
|
||||
}
|
||||
|
||||
private ApplicationBroadcastReceiver broadcastReceiver = new ApplicationBroadcastReceiver();
|
||||
|
||||
|
@@ -68,6 +68,24 @@
|
||||
<BundleAssemblies>false</BundleAssemblies>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Xamarin.AndroidX.Core">
|
||||
<Version>1.5.0</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.AndroidX.CustomView">
|
||||
<Version>1.1.0.9</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.AndroidX.Preference">
|
||||
<Version>1.1.1.11</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.AndroidX.RecyclerView">
|
||||
<Version>1.2.1.3</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="ZXing.Net.Mobile">
|
||||
<Version>3.1.0-beta2</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="ZXing.Net.Mobile.Forms">
|
||||
<Version>3.1.0-beta2</Version>
|
||||
</PackageReference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Core" />
|
||||
|
Reference in New Issue
Block a user