allow to hide softkeyboard during fingerprint scan
also support x86_64 add donate reminder
This commit is contained in:
		| @@ -10,7 +10,8 @@ | ||||
|     <RootNamespace>AndroidFileChooserBinding</RootNamespace> | ||||
|     <AssemblyName>AndroidFileChooserBinding</AssemblyName> | ||||
|     <FileAlignment>512</FileAlignment> | ||||
|     <TargetFrameworkVersion>v5.0</TargetFrameworkVersion> | ||||
|     <TargetFrameworkVersion>v6.0</TargetFrameworkVersion> | ||||
|     <AndroidUseLatestPlatformSdk>True</AndroidUseLatestPlatformSdk> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||||
|     <DebugSymbols>true</DebugSymbols> | ||||
|   | ||||
| @@ -10,7 +10,8 @@ | ||||
|     <RootNamespace>KP2AKdbLibraryBinding</RootNamespace> | ||||
|     <AssemblyName>KP2AKdbLibraryBinding</AssemblyName> | ||||
|     <FileAlignment>512</FileAlignment> | ||||
|     <TargetFrameworkVersion>v5.0</TargetFrameworkVersion> | ||||
|     <TargetFrameworkVersion>v6.0</TargetFrameworkVersion> | ||||
|     <AndroidUseLatestPlatformSdk>True</AndroidUseLatestPlatformSdk> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||||
|     <DebugSymbols>true</DebugSymbols> | ||||
|   | ||||
| @@ -26,6 +26,7 @@ namespace keepass2android | ||||
| 			AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(ctx, Android.Resource.Style.ThemeHoloLightDialog)); | ||||
| 			builder.SetTitle(ctx.GetString(Resource.String.ChangeLog_title)); | ||||
| 			List<string> changeLog = new List<string>{ | ||||
| 				ctx.GetString(Resource.String.ChangeLog_1_0_0e), | ||||
| 				ctx.GetString(Resource.String.ChangeLog_1_0_0), | ||||
| 				ctx.GetString(Resource.String.ChangeLog_0_9_9c),				 | ||||
| 				ctx.GetString(Resource.String.ChangeLog_0_9_9),				 | ||||
|   | ||||
| @@ -62,11 +62,19 @@ namespace keepass2android | ||||
| 			yield return new Reminder | ||||
| 			{ | ||||
| 				From = new DateTime(2016, 09, 17),  | ||||
| 				To = new DateTime(2016, 10, 04), | ||||
| 				To = new DateTime(2016, 09, 26), | ||||
| 				Key = "DonationOktoberfest2016" | ||||
| 					,ResourceToShow = Resource.Layout.donate | ||||
| 			}; | ||||
| 			yield return new Reminder | ||||
| 			{ | ||||
| 				From = new DateTime(2016, 09, 26), | ||||
| 				To = new DateTime(2016, 10, 04), | ||||
| 				Key = "DonationOktoberfest2016-2" | ||||
| 					, | ||||
| 				ResourceToShow = Resource.Layout.donate | ||||
| 			}; | ||||
| 			yield return new Reminder | ||||
| 			{ | ||||
| 				From = new DateTime(2017, 09, 16), | ||||
| 				To = new DateTime(2017, 09, 25), | ||||
|   | ||||
| @@ -118,8 +118,17 @@ namespace keepass2android | ||||
|  | ||||
| 			FindViewById(Resource.Id.radio_buttons).Visibility = ViewStates.Gone; | ||||
| 			FindViewById(Resource.Id.fingerprint_auth_container).Visibility = ViewStates.Gone; | ||||
| 			FindViewById<CheckBox>(Resource.Id.show_keyboard_while_fingerprint).Checked = | ||||
| 				Util.GetShowKeyboardDuringFingerprintUnlock(this); | ||||
|  | ||||
| 			if ((int) Build.VERSION.SdkInt >= 23) | ||||
| 			FindViewById<CheckBox>(Resource.Id.show_keyboard_while_fingerprint).CheckedChange += (sender, args) => | ||||
| 			{ | ||||
| 				PreferenceManager.GetDefaultSharedPreferences(this) | ||||
| 					.Edit() | ||||
| 					.PutBoolean(GetString(Resource.String.ShowKeyboardWhileFingerprint_key), args.IsChecked) | ||||
| 					.Commit(); | ||||
| 			}; | ||||
| 			if ((int)Build.VERSION.SdkInt >= 23) | ||||
| 				RequestPermissions(new[] {Manifest.Permission.UseFingerprint}, FingerprintPermissionRequestCode); | ||||
| 			else | ||||
| 			{ | ||||
| @@ -127,6 +136,17 @@ namespace keepass2android | ||||
| 				 | ||||
| 			} | ||||
|  | ||||
| 			UpdateKeyboardCheckboxVisibility(); | ||||
| 			 | ||||
| 			 | ||||
| 		} | ||||
|  | ||||
| 		private void UpdateKeyboardCheckboxVisibility() | ||||
| 		{ | ||||
| 			FindViewById(Resource.Id.show_keyboard_while_fingerprint).Visibility = (_unlockMode == FingerprintUnlockMode.Disabled) || | ||||
| 			                                                                       (_samsungFingerprint != null) | ||||
| 				? ViewStates.Gone | ||||
| 				: ViewStates.Visible; | ||||
| 		} | ||||
|  | ||||
| 		private bool TrySetupSamsung() | ||||
| @@ -205,6 +225,7 @@ namespace keepass2android | ||||
| 					//seems like not all Samsung Devices (e.g. Note 4) don't support the Android 6 fingerprint API | ||||
| 					if (!TrySetupSamsung()) | ||||
| 						SetError(Resource.String.fingerprint_hardware_error); | ||||
| 					UpdateKeyboardCheckboxVisibility(); | ||||
| 					return; | ||||
| 				} | ||||
| 				if (!fpModule.FingerprintManager.HasEnrolledFingerprints) | ||||
| @@ -213,6 +234,7 @@ namespace keepass2android | ||||
| 					return; | ||||
| 				} | ||||
| 				ShowRadioButtons(); | ||||
| 				UpdateKeyboardCheckboxVisibility(); | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| @@ -229,9 +251,12 @@ namespace keepass2android | ||||
| 			if (oldMode == newMode) | ||||
| 				return; | ||||
|  | ||||
| 				 | ||||
| 			if (_samsungFingerprint != null) | ||||
| 			{ | ||||
| 				_unlockMode = newMode; | ||||
| 				UpdateKeyboardCheckboxVisibility(); | ||||
| 			 | ||||
| 				ISharedPreferencesEditor edit = PreferenceManager.GetDefaultSharedPreferences(this).Edit(); | ||||
| 				edit.PutString(App.Kp2a.GetDb().CurrentFingerprintModePrefKey, _unlockMode.ToString()); | ||||
| 				edit.Commit(); | ||||
| @@ -241,14 +266,17 @@ namespace keepass2android | ||||
| 			if (newMode == FingerprintUnlockMode.Disabled) | ||||
| 			{ | ||||
| 				_unlockMode = newMode; | ||||
| 				UpdateKeyboardCheckboxVisibility(); | ||||
| 			 | ||||
| 				StoreUnlockMode(); | ||||
| 				return; | ||||
| 			} | ||||
|  | ||||
| 			_desiredUnlockMode = newMode; | ||||
| 			FindViewById(Resource.Id.radio_buttons).Visibility = ViewStates.Gone; | ||||
| 			FindViewById(Resource.Id.fingerprint_auth_container).Visibility = ViewStates.Visible; | ||||
| 			FindViewById(Resource.Id.show_keyboard_while_fingerprint).Visibility = ViewStates.Gone; | ||||
|  | ||||
| 			FindViewById(Resource.Id.fingerprint_auth_container).Visibility = ViewStates.Visible; | ||||
| 			_enc = new FingerprintEncryption(new FingerprintModule(this), CurrentPreferenceKey); | ||||
| 			try | ||||
| 			{ | ||||
| @@ -289,6 +317,8 @@ namespace keepass2android | ||||
| 				FindViewById(Resource.Id.fingerprint_auth_container).Visibility = ViewStates.Gone; | ||||
|  | ||||
| 				StoreUnlockMode(); | ||||
| 				UpdateKeyboardCheckboxVisibility(); | ||||
| 			 | ||||
|  | ||||
| 			}, SUCCESS_DELAY_MILLIS); | ||||
|  | ||||
|   | ||||
| @@ -1733,12 +1733,7 @@ namespace keepass2android | ||||
| 			} | ||||
| 			 | ||||
|  | ||||
| 			EditText pwd = FindViewById<EditText>(Resource.Id.password_edit); | ||||
| 			pwd.PostDelayed(() => | ||||
| 			{ | ||||
| 				InputMethodManager keyboard = (InputMethodManager)GetSystemService(Context.InputMethodService); | ||||
| 				keyboard.ShowSoftInput(pwd, 0); | ||||
| 			}, 50); | ||||
| 			 | ||||
|  | ||||
| 			View killButton = FindViewById(Resource.Id.kill_app); | ||||
| 			if (PreferenceManager.GetDefaultSharedPreferences(this) | ||||
| @@ -1811,19 +1806,33 @@ namespace keepass2android | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			bool showKeyboard = (Util.GetShowKeyboardDuringFingerprintUnlock(this)); | ||||
|  | ||||
|  | ||||
| 			if (_fingerprintPermissionGranted) | ||||
| 			{ | ||||
| 				InitFingerprintUnlock(); | ||||
| 				if (!InitFingerprintUnlock()) | ||||
| 					showKeyboard = true; | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				FindViewById<ImageButton>(Resource.Id.fingerprintbtn).Visibility = ViewStates.Gone; | ||||
|  | ||||
| 				showKeyboard = true; | ||||
| 			} | ||||
| 			 | ||||
| 			 | ||||
| 			EditText pwd = (EditText)FindViewById(Resource.Id.password_edit); | ||||
| 			pwd.PostDelayed(() => | ||||
| 			{ | ||||
| 				InputMethodManager keyboard = (InputMethodManager)GetSystemService(Context.InputMethodService); | ||||
| 				if (showKeyboard) | ||||
| 					keyboard.ShowSoftInput(pwd, 0); | ||||
| 				else | ||||
| 					keyboard.HideSoftInputFromWindow(pwd.WindowToken, HideSoftInputFlags.ImplicitOnly); | ||||
| 			}, 50); | ||||
| 		} | ||||
|  | ||||
| 		private void InitFingerprintUnlock() | ||||
| 		private bool InitFingerprintUnlock() | ||||
| 		{ | ||||
| 			var btn = FindViewById<ImageButton>(Resource.Id.fingerprintbtn); | ||||
| 			try | ||||
| @@ -1834,7 +1843,7 @@ namespace keepass2android | ||||
|  | ||||
| 				if (um != FingerprintUnlockMode.FullUnlock) | ||||
| 				{ | ||||
| 					return; | ||||
| 					return false; | ||||
| 				} | ||||
|  | ||||
| 				FingerprintModule fpModule = new FingerprintModule(this); | ||||
| @@ -1847,6 +1856,7 @@ namespace keepass2android | ||||
| 				{ | ||||
| 					btn.SetImageResource(Resource.Drawable.ic_fp_40px); | ||||
| 					_fingerprintDec.StartListening(new FingerprintAuthCallbackAdapter(this, this)); | ||||
| 					return true; | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| @@ -1856,6 +1866,7 @@ namespace keepass2android | ||||
| 					_fingerprintDec = null; | ||||
|  | ||||
| 					ClearFingerprintUnlockData(); | ||||
| 					return false; | ||||
| 				} | ||||
| 			} | ||||
| 			catch (Exception e) | ||||
| @@ -1864,6 +1875,7 @@ namespace keepass2android | ||||
| 				btn.Tag = "Error initializing Fingerprint Unlock: " + e; | ||||
|  | ||||
| 				_fingerprintDec = null; | ||||
| 				return false; | ||||
| 			} | ||||
| 				 | ||||
| 				 | ||||
|   | ||||
| @@ -213,7 +213,7 @@ namespace keepass2android | ||||
|  | ||||
|  | ||||
| 		} | ||||
| 		private void InitFingerprintUnlock() | ||||
| 		private bool InitFingerprintUnlock() | ||||
| 		{ | ||||
| 			Kp2aLog.Log("InitFingerprintUnlock"); | ||||
| 			var btn = FindViewById<ImageButton>(Resource.Id.fingerprintbtn); | ||||
| @@ -225,7 +225,7 @@ namespace keepass2android | ||||
|  | ||||
| 				if (um == FingerprintUnlockMode.Disabled) | ||||
| 				{ | ||||
| 					return; | ||||
| 					return false; | ||||
| 				} | ||||
|  | ||||
| 				if (_fingerprintPermissionGranted) | ||||
| @@ -254,7 +254,7 @@ namespace keepass2android | ||||
| 					{ | ||||
| 						Kp2aLog.Log("trying Samsung Fingerprint API...failed."); | ||||
| 						FindViewById<ImageButton>(Resource.Id.fingerprintbtn).Visibility = ViewStates.Gone; | ||||
| 						return;	 | ||||
| 						return false;	 | ||||
| 					} | ||||
| 				} | ||||
| 				btn.Tag = GetString(Resource.String.fingerprint_unlock_hint); | ||||
| @@ -264,6 +264,7 @@ namespace keepass2android | ||||
| 					Kp2aLog.Log("successfully initialized fingerprint."); | ||||
| 					btn.SetImageResource(Resource.Drawable.ic_fp_40px); | ||||
| 					_fingerprintIdentifier.StartListening(this, this); | ||||
| 					return true; | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| @@ -284,7 +285,7 @@ namespace keepass2android | ||||
|  | ||||
| 				_fingerprintIdentifier = null; | ||||
| 			} | ||||
|  | ||||
| 			return false; | ||||
|  | ||||
| 		} | ||||
|  | ||||
| @@ -335,19 +336,29 @@ namespace keepass2android | ||||
| 			 | ||||
| 			CheckIfUnloaded(); | ||||
|  | ||||
| 			EditText pwd = (EditText) FindViewById(Resource.Id.QuickUnlock_password); | ||||
|  | ||||
| 			bool showKeyboard = ((!InitFingerprintUnlock()) || (Util.GetShowKeyboardDuringFingerprintUnlock(this)));			 | ||||
|  | ||||
| 			EditText pwd = (EditText)FindViewById(Resource.Id.QuickUnlock_password); | ||||
| 			pwd.PostDelayed(() => | ||||
| 			{ | ||||
| 					InputMethodManager keyboard = (InputMethodManager) GetSystemService(Context.InputMethodService); | ||||
| 				InputMethodManager keyboard = (InputMethodManager)GetSystemService(Context.InputMethodService); | ||||
| 				if (showKeyboard) | ||||
| 					keyboard.ShowSoftInput(pwd, 0); | ||||
| 				else | ||||
| 					keyboard.HideSoftInputFromWindow(pwd.WindowToken, HideSoftInputFlags.ImplicitOnly); | ||||
| 			}, 50); | ||||
| 	 | ||||
| 			 | ||||
|  | ||||
| 			InitFingerprintUnlock(); | ||||
|  | ||||
| 			 | ||||
| 			 | ||||
| 			 | ||||
| 		} | ||||
|  | ||||
| 		 | ||||
|  | ||||
| 		protected override void OnPause() | ||||
| 		{ | ||||
| 			base.OnPause(); | ||||
|   | ||||
| @@ -67,6 +67,12 @@ | ||||
|                 app:title_text="@string/enable_fingerprint_unlock" | ||||
|                 android:background="?android:attr/selectableItemBackground" /> | ||||
|         </LinearLayout> | ||||
|       <CheckBox | ||||
|         android:id="@+id/show_keyboard_while_fingerprint" | ||||
|         android:layout_width="wrap_content" | ||||
|         android:layout_height="wrap_content" | ||||
| 		android:layout_marginLeft="12dp" | ||||
|         android:text="@string/ShowKeyboardDuringFingerprintAuth" /> | ||||
|     </LinearLayout> | ||||
|     <RelativeLayout | ||||
|         android:id="@+id/fingerprint_auth_container" | ||||
|   | ||||
| @@ -78,6 +78,7 @@ | ||||
|     <bool name="ShowUsernameInList_default">true</bool> | ||||
|     <bool name="ShowGroupnameInSearchResult_default">true</bool> | ||||
| 	<string name="ViewDatabaseSecure_key">ViewDatabaseSecure</string> | ||||
|   <string name="ShowKeyboardWhileFingerprint_key">ShowKeyboardWhileFingerprint_key</string> | ||||
|   <bool name="RememberRecentFiles_default">true</bool> | ||||
| 	<string name="TrayTotp_SettingsField_key">TrayTotp_SettingsField_key</string> | ||||
| 	<string name="TrayTotp_SeedField_key">TrayTotp_SeedField_key</string> | ||||
|   | ||||
| @@ -655,13 +655,20 @@ | ||||
|   <string name="ActivateAutoFillService_btnKeyboard">Use built-in keyboard</string> | ||||
|   <string name="ActivateAutoFillService_btnAutoFill">Use AutoFill service</string> | ||||
|   <string name="ActivateAutoFillService_toast">Please enable the Keepass2Android service.</string> | ||||
|    | ||||
|   <string name="ShowKeyboardDuringFingerprintAuth">Show soft keyboard for password input when fingerprint scan is active.</string> | ||||
|   <string name="ChangeLog_0_9_8c"> | ||||
|     Version 0.9.8c\n | ||||
|     * Fix for SSL vulnerability in Microsoft Live SDK (used when accessing files via OneDrive)\n | ||||
|     * Bug fix: Previous release contained two input methods (one crashing)\n | ||||
|   </string> | ||||
|  | ||||
|   <string name="ChangeLog_1_0_0e"> | ||||
|     Version 1.0.0e\n | ||||
|     * fix for Fingerprint Unlock on older Samsung devices with Android 6\n | ||||
|     * add native support for x86 devices\n | ||||
|     * allow to hide softkeyboard during fingerprint scan\n | ||||
|     * build system update | ||||
|   </string> | ||||
|     <string name="ChangeLog_1_0_0"> | ||||
|     Version 1.0.0\n | ||||
|     * Fingerprint Unlock (requires Android 6.0+ or a Samsung device)\n | ||||
|   | ||||
| @@ -490,6 +490,13 @@ namespace keepass2android | ||||
|             } | ||||
|         } | ||||
|  | ||||
| 		public static bool GetShowKeyboardDuringFingerprintUnlock(Context ctx) | ||||
| 		{ | ||||
| 				return (PreferenceManager.GetDefaultSharedPreferences(ctx).GetBoolean( | ||||
| 					ctx.GetString(Resource.String.ShowKeyboardWhileFingerprint_key), true)); | ||||
| 			 | ||||
| 		} | ||||
|  | ||||
|  | ||||
| 		public static void MoveBottomBarButtons(int btn1Id, int btn2Id, int bottomBarId, Activity context) | ||||
| 		{ | ||||
|   | ||||
| @@ -48,7 +48,7 @@ | ||||
|     <WarningLevel>4</WarningLevel> | ||||
|     <AndroidUseSharedRuntime>False</AndroidUseSharedRuntime> | ||||
|     <ConsolePause>False</ConsolePause> | ||||
|     <AndroidSupportedAbis>armeabi,armeabi-v7a,x86</AndroidSupportedAbis> | ||||
|     <AndroidSupportedAbis>armeabi,armeabi-v7a,x86,x86_64</AndroidSupportedAbis> | ||||
|     <CustomCommands> | ||||
|       <CustomCommands> | ||||
|         <Command type="BeforeBuild" command="UseManifestNet.bat" /> | ||||
| @@ -58,18 +58,16 @@ | ||||
|     <DefineConstants>RELEASE</DefineConstants> | ||||
|     <AndroidLinkSkip>System.Core%3b</AndroidLinkSkip> | ||||
|     <EmbedAssembliesIntoApk>True</EmbedAssembliesIntoApk> | ||||
|     <AndroidStoreUncompressedFileExtensions> | ||||
|     </AndroidStoreUncompressedFileExtensions> | ||||
|     <AndroidLinkMode>SdkOnly</AndroidLinkMode> | ||||
|     <BundleAssemblies>False</BundleAssemblies> | ||||
|     <AndroidCreatePackagePerAbi>False</AndroidCreatePackagePerAbi> | ||||
|     <MandroidI18n /> | ||||
|     <Debugger>Xamarin</Debugger> | ||||
|     <AotAssemblies>False</AotAssemblies> | ||||
|     <EnableLLVM>False</EnableLLVM> | ||||
|     <AndroidEnableMultiDex>False</AndroidEnableMultiDex> | ||||
|     <EnableProguard>False</EnableProguard> | ||||
|     <DevInstrumentationEnabled>False</DevInstrumentationEnabled> | ||||
|     <DebugSymbols>False</DebugSymbols> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'ReleaseNoNet|AnyCPU' "> | ||||
|     <DebugType>none</DebugType> | ||||
| @@ -91,6 +89,7 @@ | ||||
|     </AndroidStoreUncompressedFileExtensions> | ||||
|   </PropertyGroup> | ||||
|   <ItemGroup> | ||||
|     <Reference Include="Java.Interop" /> | ||||
|     <Reference Include="System" /> | ||||
|     <Reference Include="System.Xml" /> | ||||
|     <Reference Include="System.Core" /> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Philipp Crocoll
					Philipp Crocoll