Compare commits
	
		
			74 Commits
		
	
	
		
			l10n_maste
			...
			bugfix/web
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 2cd11ba50e | ||
|   | eddcedd00b | ||
|   | 82fedb3526 | ||
|   | cc4f0a3dec | ||
|   | cdfa48d942 | ||
|   | c4edc871b3 | ||
|   | ed6d1d2aaf | ||
|   | b0f56dbb2c | ||
|   | c794efe899 | ||
|   | c2fb4f103d | ||
|   | 18b192bc42 | ||
|   | 522fc9816d | ||
|   | 3be4fb8460 | ||
|   | 7ca07814bb | ||
|   | aaea8ed956 | ||
|   | 822ccdc349 | ||
|   | dbc1b9553a | ||
|   | 04c5f08f5f | ||
|   | 5c10385246 | ||
|   | 90f9b6f414 | ||
|   | b555194d8e | ||
|   | 0e7c4eced7 | ||
|   | 816a40d0ec | ||
|   | 75a819b7b4 | ||
|   | cf0e5be55c | ||
|   | 492fb404fe | ||
|   | 6453d215eb | ||
|   | 35f13eff53 | ||
|   | fe2c5185eb | ||
|   | f1429c0d0d | ||
|   | d6e30b805d | ||
|   | e8aeaf71d4 | ||
|   | 1500d635e9 | ||
|   | 27798ea073 | ||
|   | 891918269e | ||
|   | 0cf8ec67da | ||
|   | 217a3d107d | ||
|   | 38a229cb78 | ||
|   | 0598d49ba0 | ||
|   | f8f2dbc7f4 | ||
|   | 7449d5dbb1 | ||
|   | a890b0f66e | ||
|   | 1647ed455e | ||
|   | a383847d5b | ||
|   | 3fb2a824cf | ||
|   | dd7579ce7c | ||
|   | 49c51ceea4 | ||
|   | a5370793cb | ||
|   | 6f72020607 | ||
|   | 6a7c61ea3c | ||
|   | 46c1854481 | ||
|   | 72030a4749 | ||
|   | 1c18884527 | ||
|   | 1c5c695f4f | ||
|   | a1cef1ccda | ||
|   | 4dfcbbf62a | ||
|   | d0e1a15673 | ||
|   | 8fc9324be5 | ||
|   | 4f4724804e | ||
|   | 533d92509f | ||
|   | 96960ef376 | ||
|   | 46194317a8 | ||
|   | c4d6e18759 | ||
|   | ee41a600b1 | ||
|   | 07562cc5a9 | ||
|   | 0f5b411dc7 | ||
|   | 7577e3064c | ||
|   | d33e1f266c | ||
|   | aeda21f163 | ||
|   | 4d1142df4d | ||
|   | 4c632d0c72 | ||
|   | deb3701ebf | ||
|   | 980df2b3a7 | ||
|   | f001d1fa54 | 
| @@ -1,7 +1,7 @@ | ||||
| files: | ||||
|   - source: src/keepass2android/Resources/values/strings.xml | ||||
|   - source: src/keepass2android-app/Resources/values/strings.xml | ||||
|     translation: >- | ||||
|       /src/keepass2android/Resources/values-%two_letters_code%/%original_file_name% | ||||
|       /src/keepass2android-app/Resources/values-%two_letters_code%/%original_file_name% | ||||
|     translate_attributes: '0' | ||||
|     content_segmentation: '0' | ||||
|     languages_mapping: | ||||
|   | ||||
							
								
								
									
										48
									
								
								src/DropboxBinding/Additions/AboutAdditions.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,48 @@ | ||||
| Additions allow you to add arbitrary C# to the generated classes | ||||
| before they are compiled.  This can be helpful for providing convenience | ||||
| methods or adding pure C# classes. | ||||
|  | ||||
| == Adding Methods to Generated Classes == | ||||
|  | ||||
| Let's say the library being bound has a Rectangle class with a constructor | ||||
| that takes an x and y position, and a width and length size.  It will look like | ||||
| this: | ||||
|  | ||||
| public partial class Rectangle | ||||
| { | ||||
|     public Rectangle (int x, int y, int width, int height) | ||||
|     { | ||||
|         // JNI bindings | ||||
|     } | ||||
| } | ||||
|  | ||||
| Imagine we want to add a constructor to this class that takes a Point and | ||||
| Size structure instead of 4 ints.  We can add a new file called Rectangle.cs | ||||
| with a partial class containing our new method: | ||||
|  | ||||
| public partial class Rectangle | ||||
| { | ||||
|     public Rectangle (Point location, Size size) : | ||||
|         this (location.X, location.Y, size.Width, size.Height) | ||||
|     { | ||||
|     } | ||||
| } | ||||
|  | ||||
| At compile time, the additions class will be added to the generated class | ||||
| and the final assembly will a Rectangle class with both constructors. | ||||
|  | ||||
|  | ||||
| == Adding C# Classes == | ||||
|  | ||||
| Another thing that can be done is adding fully C# managed classes to the | ||||
| generated library.  In the above example, let's assume that there isn't a | ||||
| Point class available in Java or our library.  The one we create doesn't need | ||||
| to interact with Java, so we'll create it like a normal class in C#. | ||||
|  | ||||
| By adding a Point.cs file with this class, it will end up in the binding library: | ||||
|  | ||||
| public class Point | ||||
| { | ||||
|     public int X { get; set; } | ||||
|     public int Y { get; set; } | ||||
| } | ||||
							
								
								
									
										8
									
								
								src/DropboxBinding/DropboxBinding.csproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,8 @@ | ||||
| <Project Sdk="Microsoft.NET.Sdk"> | ||||
|   <PropertyGroup> | ||||
|     <TargetFramework>net8.0-android</TargetFramework> | ||||
|     <SupportedOSPlatformVersion>21</SupportedOSPlatformVersion> | ||||
|     <Nullable>enable</Nullable> | ||||
|     <ImplicitUsings>enable</ImplicitUsings> | ||||
|   </PropertyGroup> | ||||
| </Project> | ||||
							
								
								
									
										14
									
								
								src/DropboxBinding/Transforms/EnumFields.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,14 @@ | ||||
| <enum-field-mappings> | ||||
|   <!-- | ||||
|   This example converts the constants Fragment_id, Fragment_name, | ||||
|   and Fragment_tag from android.support.v4.app.FragmentActivity.FragmentTag | ||||
|   to an enum called Android.Support.V4.App.FragmentTagType with values | ||||
|   Id, Name, and Tag. | ||||
|    | ||||
|   <mapping jni-class="android/support/v4/app/FragmentActivity$FragmentTag" clr-enum-type="Android.Support.V4.App.FragmentTagType"> | ||||
|     <field jni-name="Fragment_name" clr-name="Name" value="0" /> | ||||
|     <field jni-name="Fragment_id" clr-name="Id" value="1" /> | ||||
|     <field jni-name="Fragment_tag" clr-name="Tag" value="2" /> | ||||
|   </mapping> | ||||
|   --> | ||||
| </enum-field-mappings> | ||||
							
								
								
									
										13
									
								
								src/DropboxBinding/Transforms/EnumMethods.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,13 @@ | ||||
| <enum-method-mappings> | ||||
|   <!-- | ||||
|   This example changes the Java method: | ||||
|     android.support.v4.app.Fragment.SavedState.writeToParcel (int flags) | ||||
|   to be: | ||||
|     android.support.v4.app.Fragment.SavedState.writeToParcel (Android.OS.ParcelableWriteFlags flags) | ||||
|   when bound in C#. | ||||
|    | ||||
|   <mapping jni-class="android/support/v4/app/Fragment.SavedState"> | ||||
|     <method jni-name="writeToParcel" parameter="flags" clr-enum-type="Android.OS.ParcelableWriteFlags" /> | ||||
|   </mapping> | ||||
|   --> | ||||
| </enum-method-mappings> | ||||
							
								
								
									
										35
									
								
								src/DropboxBinding/Transforms/Metadata.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,35 @@ | ||||
| <metadata> | ||||
|  | ||||
|   <remove-node path="/api/package[@name='com.dropbox.core']" /> | ||||
|   <remove-node path="/api/package[@name='com.dropbox.core.http']" /> | ||||
|   <remove-node path="/api/package[@name='com.dropbox.core.json']" /> | ||||
|   <remove-node path="/api/package[@name='com.dropbox.core.oauth']" /> | ||||
|   <remove-node path="/api/package[@name='com.dropbox.core.sdk.android']" /> | ||||
|   <remove-node path="/api/package[@name='com.dropbox.core.stone']" /> | ||||
|   <remove-node path="/api/package[@name='com.dropbox.core.util']" /> | ||||
|   <remove-node path="/api/package[@name='com.dropbox.core.v1']" /> | ||||
|   <remove-node path="/api/package[@name='com.dropbox.core.v2']" /> | ||||
|   <remove-node path="/api/package[@name='com.dropbox.core.v2.account']" /> | ||||
|   <remove-node path="/api/package[@name='com.dropbox.core.v2.callbacks']" /> | ||||
|   <remove-node path="/api/package[@name='com.dropbox.core.v2.check']" /> | ||||
|   <remove-node path="/api/package[@name='com.dropbox.core.v2.seenstate']" /> | ||||
|   <remove-node path="/api/package[@name='com.dropbox.core.v2.teamcommon']" /> | ||||
|   <remove-node path="/api/package[@name='com.dropbox.core.v2.secondaryemails']" /> | ||||
|   <remove-node path="/api/package[@name='com.dropbox.core.v2.async']" /> | ||||
|   <remove-node path="/api/package[@name='com.dropbox.core.v2.auth']" /> | ||||
|   <remove-node path="/api/package[@name='com.dropbox.core.v2.common']" /> | ||||
|   <remove-node path="/api/package[@name='com.dropbox.core.v2.contacts']" /> | ||||
|   <remove-node path="/api/package[@name='com.dropbox.core.v2.fileproperties']" /> | ||||
|   <remove-node path="/api/package[@name='com.dropbox.core.v2.filerequests']" /> | ||||
|   <remove-node path="/api/package[@name='com.dropbox.core.v2.files']" /> | ||||
|   <remove-node path="/api/package[@name='com.dropbox.core.v2.paper']" /> | ||||
|   <remove-node path="/api/package[@name='com.dropbox.core.v2.openid']" /> | ||||
|   <remove-node path="/api/package[@name='com.dropbox.core.v2.sharing']" /> | ||||
|   <remove-node path="/api/package[@name='com.dropbox.core.v2.team']" /> | ||||
|   <remove-node path="/api/package[@name='com.dropbox.core.v2.teamlog']" /> | ||||
|   <remove-node path="/api/package[@name='com.dropbox.core.v2.teampolicies']" /> | ||||
|   <remove-node path="/api/package[@name='com.dropbox.core.v2.users']" /> | ||||
|   <remove-node path="/api/package[@name='com.dropbox.core.v2.userscommon']" /> | ||||
|   <remove-node path="/api/package[@name='com.dropbox.android']" /> | ||||
|   <remove-node path="/api/package[@name='com.dropbox.core.android']" /> | ||||
| </metadata> | ||||
							
								
								
									
										
											BIN
										
									
								
								src/DropboxBinding/dropbox-android-sdk-7.0.0.aar
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -29,6 +29,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PCloudBindings", "PCloudBin | ||||
| EndProject | ||||
| Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kp2aAutofillParser.Tests", "Kp2aAutofillParser.Tests\Kp2aAutofillParser.Tests.csproj", "{F5A2A8F9-C084-498F-9603-9D927BA5C626}" | ||||
| EndProject | ||||
| Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DropboxBinding", "DropboxBinding\DropboxBinding.csproj", "{2FE6E335-E834-4F86-AB83-2C5D225DA929}" | ||||
| EndProject | ||||
| Global | ||||
| 	GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||||
| 		Debug|Any CPU = Debug|Any CPU | ||||
| @@ -369,6 +371,30 @@ Global | ||||
| 		{F5A2A8F9-C084-498F-9603-9D927BA5C626}.ReleaseNoNet|Win32.Build.0 = Release|Any CPU | ||||
| 		{F5A2A8F9-C084-498F-9603-9D927BA5C626}.ReleaseNoNet|x64.ActiveCfg = Release|Any CPU | ||||
| 		{F5A2A8F9-C084-498F-9603-9D927BA5C626}.ReleaseNoNet|x64.Build.0 = Release|Any CPU | ||||
| 		{2FE6E335-E834-4F86-AB83-2C5D225DA929}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||||
| 		{2FE6E335-E834-4F86-AB83-2C5D225DA929}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
| 		{2FE6E335-E834-4F86-AB83-2C5D225DA929}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU | ||||
| 		{2FE6E335-E834-4F86-AB83-2C5D225DA929}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU | ||||
| 		{2FE6E335-E834-4F86-AB83-2C5D225DA929}.Debug|Win32.ActiveCfg = Debug|Any CPU | ||||
| 		{2FE6E335-E834-4F86-AB83-2C5D225DA929}.Debug|Win32.Build.0 = Debug|Any CPU | ||||
| 		{2FE6E335-E834-4F86-AB83-2C5D225DA929}.Debug|x64.ActiveCfg = Debug|Any CPU | ||||
| 		{2FE6E335-E834-4F86-AB83-2C5D225DA929}.Debug|x64.Build.0 = Debug|Any CPU | ||||
| 		{2FE6E335-E834-4F86-AB83-2C5D225DA929}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
| 		{2FE6E335-E834-4F86-AB83-2C5D225DA929}.Release|Any CPU.Build.0 = Release|Any CPU | ||||
| 		{2FE6E335-E834-4F86-AB83-2C5D225DA929}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU | ||||
| 		{2FE6E335-E834-4F86-AB83-2C5D225DA929}.Release|Mixed Platforms.Build.0 = Release|Any CPU | ||||
| 		{2FE6E335-E834-4F86-AB83-2C5D225DA929}.Release|Win32.ActiveCfg = Release|Any CPU | ||||
| 		{2FE6E335-E834-4F86-AB83-2C5D225DA929}.Release|Win32.Build.0 = Release|Any CPU | ||||
| 		{2FE6E335-E834-4F86-AB83-2C5D225DA929}.Release|x64.ActiveCfg = Release|Any CPU | ||||
| 		{2FE6E335-E834-4F86-AB83-2C5D225DA929}.Release|x64.Build.0 = Release|Any CPU | ||||
| 		{2FE6E335-E834-4F86-AB83-2C5D225DA929}.ReleaseNoNet|Any CPU.ActiveCfg = Release|Any CPU | ||||
| 		{2FE6E335-E834-4F86-AB83-2C5D225DA929}.ReleaseNoNet|Any CPU.Build.0 = Release|Any CPU | ||||
| 		{2FE6E335-E834-4F86-AB83-2C5D225DA929}.ReleaseNoNet|Mixed Platforms.ActiveCfg = Release|Any CPU | ||||
| 		{2FE6E335-E834-4F86-AB83-2C5D225DA929}.ReleaseNoNet|Mixed Platforms.Build.0 = Release|Any CPU | ||||
| 		{2FE6E335-E834-4F86-AB83-2C5D225DA929}.ReleaseNoNet|Win32.ActiveCfg = Release|Any CPU | ||||
| 		{2FE6E335-E834-4F86-AB83-2C5D225DA929}.ReleaseNoNet|Win32.Build.0 = Release|Any CPU | ||||
| 		{2FE6E335-E834-4F86-AB83-2C5D225DA929}.ReleaseNoNet|x64.ActiveCfg = Release|Any CPU | ||||
| 		{2FE6E335-E834-4F86-AB83-2C5D225DA929}.ReleaseNoNet|x64.Build.0 = Release|Any CPU | ||||
| 	EndGlobalSection | ||||
| 	GlobalSection(SolutionProperties) = preSolution | ||||
| 		HideSolutionNode = FALSE | ||||
|   | ||||
| @@ -730,7 +730,7 @@ namespace Kp2aAutofillParser | ||||
|     { | ||||
|         public List<TField> InputFields { get; set; } = new List<TField>(); | ||||
|  | ||||
|         public string PackageId { get; set; } = null; | ||||
|         public string? PackageId { get; set; } = null; | ||||
|         public string WebDomain { get; set; } = null; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -12,7 +12,6 @@ | ||||
|     <PackageReference Include="FluentFTP" Version="51.1.0" /> | ||||
|     <PackageReference Include="MegaApiClient" Version="1.10.4" /> | ||||
|     <PackageReference Include="Microsoft.Graph" Version="5.68.0" /> | ||||
| 	<PackageReference Include="Microsoft.Graph.Auth" Version="1.0.0-preview.7" /> | ||||
|     <PackageReference Include="Microsoft.Identity.Client" Version="4.67.1" /> | ||||
|     <PackageReference Include="Xamarin.AndroidX.Browser" Version="1.8.0" /> | ||||
|     <PackageReference Include="Xamarin.AndroidX.Core" Version="1.13.1.5" /> | ||||
|   | ||||
| @@ -138,7 +138,8 @@ namespace keepass2android | ||||
| 				{ | ||||
| 					continue; | ||||
| 				} | ||||
| 				if (host.IndexOf(otherHost, StringComparison.InvariantCultureIgnoreCase) > -1) | ||||
| 				if (string.Equals(host, otherHost, StringComparison.OrdinalIgnoreCase) || | ||||
| 					host.EndsWith("." + otherHost, StringComparison.OrdinalIgnoreCase)) | ||||
| 				{ | ||||
| 					pgResults.AddEntry(entry, false); | ||||
| 				} | ||||
|   | ||||
| @@ -41,7 +41,8 @@ dependencies { | ||||
|         exclude group: 'com.google.android.google-play-services' | ||||
|     } | ||||
|     implementation 'com.google.apis:google-api-services-drive:v2-rev102-1.16.0-rc' | ||||
|     implementation 'com.dropbox.core:dropbox-core-sdk:5.4.6' | ||||
|     implementation 'com.dropbox.core:dropbox-core-sdk:7.0.0' | ||||
|     implementation 'com.dropbox.core:dropbox-android-sdk:7.0.0' | ||||
|     implementation 'com.google.api-client:google-api-client:1.30.5' | ||||
|     implementation 'com.google.api-client:google-api-client-android:1.30.5' | ||||
|  | ||||
|   | ||||
| @@ -7,6 +7,7 @@ import com.dropbox.core.DbxOAuth1Upgrader; | ||||
| import com.dropbox.core.DbxRequestConfig; | ||||
| import com.dropbox.core.InvalidAccessTokenException; | ||||
| import com.dropbox.core.android.Auth; | ||||
|  | ||||
| import com.dropbox.core.json.JsonReadException; | ||||
| import com.dropbox.core.oauth.DbxCredential; | ||||
| import com.dropbox.core.v2.DbxClientV2; | ||||
| @@ -154,7 +155,7 @@ public class DropboxV2Storage extends JavaFileStorageBase | ||||
|     { | ||||
|         if ((previousFileVersion == null) || (previousFileVersion.equals(""))) | ||||
|             return false; | ||||
|             path = removeProtocol(path); | ||||
|         path = removeProtocol(path); | ||||
|         try { | ||||
|             Metadata entry = dbxClient.files().getMetadata(path); | ||||
|             return !String.valueOf(entry.hashCode()) .equals(previousFileVersion); | ||||
|   | ||||
| @@ -356,7 +356,13 @@ public class KP2AKeyboard extends InputMethodService | ||||
|         pFilter.addAction("android.intent.action.PACKAGE_ADDED"); | ||||
|         pFilter.addAction("android.intent.action.PACKAGE_REPLACED"); | ||||
|         pFilter.addAction("android.intent.action.PACKAGE_REMOVED"); | ||||
|         registerReceiver(mPluginManager, pFilter); | ||||
|         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { | ||||
|             registerReceiver(mPluginManager, pFilter, RECEIVER_EXPORTED); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             registerReceiver(mPluginManager, pFilter); | ||||
|         } | ||||
|  | ||||
|  | ||||
|         LatinIMEUtil.GCUtils.getInstance().reset(); | ||||
| @@ -375,16 +381,28 @@ public class KP2AKeyboard extends InputMethodService | ||||
|  | ||||
|         // register to receive ringer mode changes for silent mode | ||||
|         IntentFilter filter = new IntentFilter(AudioManager.RINGER_MODE_CHANGED_ACTION); | ||||
|         registerReceiver(mSilentModeReceiver, filter); | ||||
|         | ||||
|         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { | ||||
|             registerReceiver(mSilentModeReceiver, filter, RECEIVER_EXPORTED); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             registerReceiver(mSilentModeReceiver, filter); | ||||
|         } | ||||
|  | ||||
|         prefs.registerOnSharedPreferenceChangeListener(this); | ||||
|          | ||||
|         //check if we have KP2A data available: | ||||
|         mHadKp2aData = mShowKp2aKeyboard = keepass2android.kbbridge.KeyboardData.hasData(); | ||||
|         mHadKp2aData = mShowKp2aKeyboard = KeyboardData.hasData(); | ||||
|          | ||||
|         mClearKeyboardReceiver = new ClearKeyboardBroadcastReceiver(); | ||||
|         registerReceiver(mClearKeyboardReceiver, new IntentFilter(get_KEEPASS2ANDROID_KEYBOARD_CLEARED(this))); | ||||
|         android.util.Log.d("KP2AK", "registered receiver for clear keyboard broadcast: "+get_KEEPASS2ANDROID_KEYBOARD_CLEARED(this)); | ||||
|         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { | ||||
|             registerReceiver(mClearKeyboardReceiver, new IntentFilter(get_KEEPASS2ANDROID_KEYBOARD_CLEARED(this)), RECEIVER_EXPORTED); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             registerReceiver(mClearKeyboardReceiver, new IntentFilter(get_KEEPASS2ANDROID_KEYBOARD_CLEARED(this))); | ||||
|         } | ||||
|         Log.d("KP2AK", "registered receiver for clear keyboard broadcast: "+get_KEEPASS2ANDROID_KEYBOARD_CLEARED(this)); | ||||
|          | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -19,7 +19,7 @@ | ||||
| --> | ||||
| <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> | ||||
|     <!-- Title for Latin keyboard  --> | ||||
|     <string name="english_ime_name">KeePass2Android-Tastatur</string> | ||||
|     <string name="english_ime_name">Keepass2Android-Tastatur</string> | ||||
|     <!-- Title for Latin keyboard settings activity / dialog --> | ||||
|     <string name="english_ime_settings">Android-Tastatureinstellungen</string> | ||||
|     <!-- Title for Latin keyboard input options dialog --> | ||||
| @@ -49,7 +49,7 @@ | ||||
|     <!-- Description for text prediction --> | ||||
|     <string name="prediction_summary">Automatische Vervollständigung während der Eingabe aktivieren</string> | ||||
|     <!-- Dialog title for auto complete choices --> | ||||
|     <string name="auto_complete_dialog_title">Automatische. Vervollständigung </string> | ||||
|     <string name="auto_complete_dialog_title">Autovervollständigung</string> | ||||
|     <!-- Option to enable text prediction in landscape --> | ||||
|     <string name="prediction_landscape">Textfeld vergrößern</string> | ||||
|     <!-- Description for text prediction --> | ||||
| @@ -62,7 +62,7 @@ | ||||
|     <string name="auto_punctuate">Autom. Zeichensetzung</string> | ||||
|     <!-- Description for auto punctuate --> | ||||
|     <!-- Option to enable quick fixes --> | ||||
|     <string name="quick_fixes">Schnelle Fixierung</string> | ||||
|     <string name="quick_fixes">Schnelle Korrektur</string> | ||||
|     <!-- Description for quick fixes --> | ||||
|     <string name="quick_fixes_summary">Korrigiert gängige Tippfehler</string> | ||||
|     <!-- Option to enable showing suggestions --> | ||||
| @@ -112,7 +112,7 @@ | ||||
|     <!-- Tip to long press on typed word to add to dictionary --> | ||||
|     <string name="tip_add_to_dictionary">Lange auf das Wort ganz links außen drücken, um es zum Wörterbuch hinzuzufügen</string> | ||||
|     <!-- Instruction to touch the bubble to continue --> | ||||
|     <string name="touch_to_continue">Diesen Hinweis berühren, um fortzufahren.»</string> | ||||
|     <string name="touch_to_continue">Diesen Hinweis antippen, um fortzufahren.»</string> | ||||
|     <!-- Instruction to touch the bubble to start typing --> | ||||
|     <string name="touch_to_finish">Hier berühren, um diesen Hinweis zu schließen und mit dem Tippen zu beginnen!</string> | ||||
|     <!-- Tutorial tip 1 - The keyboard opens any time you touch a text field --> | ||||
| @@ -138,7 +138,7 @@ | ||||
|     <!-- Label for "switch to symbols" key.  Must be short to fit on key! --> | ||||
|     <string name="label_symbol_key">\?123</string> | ||||
|     <!-- Label for "switch to numeric" key.  Must be short to fit on key! --> | ||||
|     <string name="label_phone_key">Nummer</string> | ||||
|     <string name="label_phone_key">123</string> | ||||
|     <!-- Label for "switch to alphabetic" key.  Must be short to fit on key! --> | ||||
|     <string name="label_alpha_key">ABC</string> | ||||
|     <!-- Label for ALT modifier key.  Must be short to fit on key! --> | ||||
| @@ -161,7 +161,7 @@ | ||||
|         "Swipe across keyboard to speak"). Also shown when enabling settings. --> | ||||
|     <string name="voice_hint_dialog_message">Um die Spracheingabe zu verwenden, drücken Sie die Mikrofontaste oder ziehen Sie Ihren Finger über die Bildschirmtastatur.</string> | ||||
|     <!-- Short message to tell the user the system is ready for them to speak. --> | ||||
|     <string name="voice_listening">Sprechen Sie jetzt</string> | ||||
|     <string name="voice_listening">Jetzt sprechen</string> | ||||
|     <!-- Short message shown after the user finishes speaking. --> | ||||
|     <string name="voice_working">Vorgang läuft</string> | ||||
|     <!-- Short message shown before the user should speak. --> | ||||
| @@ -186,7 +186,7 @@ | ||||
|     <!-- Short hint shown in candidate view to explain voice input. --> | ||||
|     <string name="voice_swipe_hint"><b>„Hinweis:“</b>„ Ziehen Sie zum Sprechen den Finger über die Tastatur.“</string> | ||||
|     <!-- Short hint shown in candidate view to explain that user can speak punctuation. --> | ||||
|     <string name="voice_punctuation_hint"><b>„Hinweis: “</b>„ Versuchen Sie beim nächsten Mal, Satzzeichen wie „Punkt“, „Komma“ oder „Fragezeichen“ per Sprachbefehl einzugeben.“</string> | ||||
|     <string name="voice_punctuation_hint"><b>Hinweis: </b>Versuche beim nächsten Mal, Satzzeichen wie „Punkt“, „Komma“ oder „Fragezeichen“ per Sprachbefehl einzugeben.</string> | ||||
|     <!-- Label on button to stop recognition. Must be short to fit on button. --> | ||||
|     <string name="cancel">Abbrechen</string> | ||||
|     <!-- Label on button when an error occurs --> | ||||
| @@ -216,7 +216,7 @@ | ||||
|     <!-- appears above image showing the user to click on a TextView to show the IME --> | ||||
|     <string name="open_the_keyboard"><font size="17"><b>„Tastatur öffnen“\n</b></font><font size="3">\n</font>„Berühren Sie ein beliebiges Textfeld.“</string> | ||||
|     <!-- appears above the image showing the back button used to close the keyboard --> | ||||
|     <string name="close_the_keyboard"><font size="17"><b>„Tastatur schließen“\n</b></font><font size="3">\n</font>„Drücken Sie die Zurück-Taste.“</string> | ||||
|     <string name="close_the_keyboard"><font size="17"><b>Tastatur schließen\n</b></font><font size="3">\n</font>Drücken die Zurück-Taste.</string> | ||||
|     <!-- appears above image showing how to use touch and hold --> | ||||
|     <string name="touch_and_hold"><font size="17"><b>„Für Optionen eine Taste berühren und gedrückt halten“\n</b></font><font size="3">\n</font>„Greifen Sie auf Satzzeichen und Akzente zu.“</string> | ||||
|     <!-- appears above image showing how to access keyboard settings --> | ||||
|   | ||||
| @@ -56,7 +56,7 @@ | ||||
|     <string name="afc_title_sort_by">Sortieren nach…</string> | ||||
|     <string name="afc_yesterday">Gestern</string> | ||||
|     <plurals name="afc_title_choose_directories"> | ||||
|         <item quantity="one">Ordner wählen …</item> | ||||
|         <item quantity="one">Ordner wählen…</item> | ||||
|         <item quantity="other">Verzeichnisse wählen</item> | ||||
|     </plurals> | ||||
|     <plurals name="afc_title_choose_files"> | ||||
| @@ -64,7 +64,7 @@ | ||||
|         <item quantity="other">Dateien wählen …</item> | ||||
|     </plurals> | ||||
|     <plurals name="afc_title_choose_files_directories"> | ||||
|         <item quantity="one">Datei/Ordner wählen …</item> | ||||
|         <item quantity="one">Datei/Ordner wählen…</item> | ||||
|         <item quantity="other">Dateien/Ordner wählen …</item> | ||||
|     </plurals> | ||||
| </resources> | ||||
|   | ||||
| @@ -14,9 +14,11 @@ using Android.Runtime; | ||||
| using Android.Text; | ||||
| using Android.Text.Method; | ||||
| using Android.Text.Util; | ||||
| using Android.Util; | ||||
| using Android.Views; | ||||
| using Android.Webkit; | ||||
| using Android.Widget; | ||||
| using AndroidX.Core.Content; | ||||
| using Google.Android.Material.Dialog; | ||||
| using keepass2android; | ||||
| 
 | ||||
| @@ -29,7 +31,16 @@ namespace keepass2android | ||||
| 			MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(ctx); | ||||
| 			builder.SetTitle(ctx.GetString(Resource.String.ChangeLog_title)); | ||||
| 			List<string> changeLog = new List<string>{ | ||||
|                 BuildChangelogString(ctx, new List<int>{Resource.Array.ChangeLog_1_11,Resource.Array.ChangeLog_1_11_net}, "1.11"), | ||||
|                 BuildChangelogString(ctx, new List<int>{Resource.Array.ChangeLog_1_12 | ||||
| #if !NoNet | ||||
| 					,Resource.Array.ChangeLog_1_12_net | ||||
| #endif | ||||
|                 }, "1.12"), | ||||
|                 BuildChangelogString(ctx, new List<int>{Resource.Array.ChangeLog_1_11 | ||||
| #if !NoNet | ||||
|                     ,Resource.Array.ChangeLog_1_11_net | ||||
| #endif | ||||
|                 }, "1.11"), | ||||
|                 BuildChangelogString(ctx, Resource.Array.ChangeLog_1_10, "1.10"), | ||||
|                 BuildChangelogString(ctx, Resource.Array.ChangeLog_1_09e, "1.09e"), | ||||
| 				BuildChangelogString(ctx, Resource.Array.ChangeLog_1_09d, "1.09d"), | ||||
| @@ -99,32 +110,28 @@ namespace keepass2android | ||||
| 				warning = ctx.GetString(Resource.String.PreviewWarning); | ||||
| 			} | ||||
| 
 | ||||
| 			builder.SetPositiveButton(Android.Resource.String.Ok, (dlgSender, dlgEvt) => {((AlertDialog)dlgSender).Dismiss(); }); | ||||
| 			builder.SetPositiveButton(Android.Resource.String.Ok, (dlgSender, dlgEvt) => {((AndroidX.AppCompat.App.AlertDialog)dlgSender).Dismiss(); }); | ||||
| 			builder.SetCancelable(false); | ||||
| 
 | ||||
| 			WebView wv = new WebView(ctx); | ||||
| 
 | ||||
| 			wv.SetBackgroundColor(Color.White); | ||||
| 			wv.LoadDataWithBaseURL(null, GetLog(changeLog, warning, ctx), "text/html", "UTF-8", null); | ||||
| 			 | ||||
|              | ||||
|              | ||||
| 
 | ||||
| 
 | ||||
| 			//builder.SetMessage(""); | ||||
| 			builder.SetView(wv); | ||||
| 			Dialog dialog = builder.Create(); | ||||
| 			dialog.DismissEvent += (sender, e) => | ||||
|             dialog.DismissEvent += (sender, e) => | ||||
| 			{ | ||||
| 				onDismiss(); | ||||
| 			}; | ||||
| 			dialog.Show(); | ||||
| 			/*TextView message = (TextView)dialog.FindViewById(Android.Resource.Id.Message); | ||||
| 
 | ||||
| 			 | ||||
| 			message.TextFormatted = Html.FromHtml(ConcatChangeLog(ctx, changeLog.ToArray())); | ||||
| 			message.AutoLinkMask=MatchOptions.WebUrls;*/ | ||||
|             wv.SetBackgroundColor(Color.Transparent); | ||||
|             wv.LoadDataWithBaseURL(null, GetLog(changeLog, warning, dialog.Context), "text/html", "UTF-8", null); | ||||
| 
 | ||||
|             dialog.Show(); | ||||
| 		} | ||||
| 
 | ||||
| 	    private static string BuildChangelogString(Context ctx, int changeLogResId, string version) | ||||
|         private static string BuildChangelogString(Context ctx, int changeLogResId, string version) | ||||
|         { | ||||
|             return BuildChangelogString(ctx, new List<int>() { changeLogResId }, version); | ||||
| 
 | ||||
| @@ -150,32 +157,44 @@ namespace keepass2android | ||||
| 
 | ||||
|         } | ||||
| 
 | ||||
|         private const string HtmlStart = @"<html>
 | ||||
| 		private const string HtmlEnd = @"</body>
 | ||||
| </html>";
 | ||||
|      | ||||
| 		private static string GetLog(List<string> changeLog, string warning, Context ctx) | ||||
|         { | ||||
|             string secondaryColor = "31628D"; | ||||
|             string onSurfaceColor = "171D1E"; | ||||
|             if (((int)ctx.Resources.Configuration.UiMode & (int)UiMode.NightMask) == (int)UiMode.NightYes) | ||||
|             { | ||||
|                 secondaryColor = "99CBFF"; | ||||
|                 onSurfaceColor = "E1E4D6"; | ||||
|             } | ||||
|                  | ||||
| 
 | ||||
|             string HtmlStart = @"<html>
 | ||||
|   <head> | ||||
|     <style type='text/css'> | ||||
|       a            { color:#000000 } | ||||
|       a            { color:#"+ onSurfaceColor + @" } | ||||
|       div.title    {  | ||||
|           color:287AA9;  | ||||
|           color:"+ secondaryColor+@";  | ||||
|           font-size:1.2em;  | ||||
|           font-weight:bold;  | ||||
|           margin-top:1em;  | ||||
|           margin-bottom:0.5em;  | ||||
|           text-align:center } | ||||
|       div.subtitle {  | ||||
|           color:287AA9;  | ||||
|           color:"+ secondaryColor+@";  | ||||
|           font-size:0.8em;  | ||||
|           margin-bottom:1em;  | ||||
|           text-align:center } | ||||
|       div.freetext { color:#000000 } | ||||
|       div.list     { color:#000000 } | ||||
|       div.freetext { color:#"+ onSurfaceColor + @" } | ||||
|       div.list     { color:#"+ onSurfaceColor + @" } | ||||
|     </style> | ||||
|   </head> | ||||
|   <body>";
 | ||||
| 		private const string HtmlEnd = @"</body>
 | ||||
| </html>";
 | ||||
| 		private static string GetLog(List<string> changeLog, string warning, Context ctx) | ||||
| 		{ | ||||
| 			StringBuilder sb = new StringBuilder(HtmlStart); | ||||
| 
 | ||||
| 
 | ||||
|             StringBuilder sb = new StringBuilder(HtmlStart); | ||||
| 			if (!string.IsNullOrEmpty(warning)) | ||||
| 			{ | ||||
| 				sb.Append(warning); | ||||
| @@ -53,6 +53,7 @@ using keepass2android.fileselect; | ||||
| using KeeTrayTOTP.Libraries; | ||||
| using Boolean = Java.Lang.Boolean; | ||||
| using Android.Util; | ||||
| using AndroidX.Core.Content; | ||||
| using Google.Android.Material.Dialog; | ||||
| using keepass2android; | ||||
| 
 | ||||
| @@ -491,9 +492,9 @@ namespace keepass2android | ||||
| 			App.Kp2a.LastOpenedEntry = new PwEntryOutput(Entry, App.Kp2a.CurrentDb); | ||||
| 
 | ||||
| 			_pluginActionReceiver = new PluginActionReceiver(this); | ||||
| 			RegisterReceiver(_pluginActionReceiver, new IntentFilter(Strings.ActionAddEntryAction), ReceiverFlags.Exported); | ||||
| 			ContextCompat.RegisterReceiver(this, _pluginActionReceiver, new IntentFilter(Strings.ActionAddEntryAction), (int)ReceiverFlags.Exported); | ||||
| 			_pluginFieldReceiver = new PluginFieldReceiver(this); | ||||
| 			RegisterReceiver(_pluginFieldReceiver, new IntentFilter(Strings.ActionSetEntryField), ReceiverFlags.Exported); | ||||
|             ContextCompat.RegisterReceiver(this, _pluginFieldReceiver, new IntentFilter(Strings.ActionSetEntryField), (int)ReceiverFlags.Exported); | ||||
| 
 | ||||
|             var notifyPluginsOnOpenThread = new Thread(NotifyPluginsOnOpen); | ||||
|             notifyPluginsOnOpenThread.Start(); | ||||
| @@ -21,6 +21,7 @@ using Android.OS; | ||||
| using Android.Preferences; | ||||
| using Android.Runtime; | ||||
| using Android.Views; | ||||
| using AndroidX.Core.Content; | ||||
| using KeePassLib.Serialization; | ||||
| 
 | ||||
| namespace keepass2android | ||||
| @@ -69,7 +70,7 @@ namespace keepass2android | ||||
| 			IntentFilter filter = new IntentFilter(); | ||||
| 			filter.AddAction(Intents.DatabaseLocked); | ||||
| 			filter.AddAction(Intent.ActionScreenOff); | ||||
| 			RegisterReceiver(_intentReceiver, filter, ReceiverFlags.Exported); | ||||
|             ContextCompat.RegisterReceiver(this, _intentReceiver, filter, (int)ReceiverFlags.Exported); | ||||
| 		} | ||||
| 
 | ||||
| 		protected override void OnDestroy() | ||||
| @@ -21,6 +21,7 @@ using Android.OS; | ||||
| using Android.Preferences; | ||||
| using Android.Runtime; | ||||
| using Android.Views; | ||||
| using AndroidX.Core.Content; | ||||
| using KeePassLib.Serialization; | ||||
| 
 | ||||
| namespace keepass2android | ||||
| @@ -55,7 +56,7 @@ namespace keepass2android | ||||
| 
 | ||||
| 			filter.AddAction(Intents.DatabaseLocked); | ||||
| 			filter.AddAction(Intent.ActionScreenOff); | ||||
| 			RegisterReceiver(_intentReceiver, filter, ReceiverFlags.Exported); | ||||
|             ContextCompat.RegisterReceiver(this, _intentReceiver, filter, (int)ReceiverFlags.Exported); | ||||
| 
 | ||||
| 		} | ||||
| 		 | ||||
| @@ -18,6 +18,7 @@ This file is part of Keepass2Android, Copyright 2013 Philipp Crocoll. This file | ||||
| using System; | ||||
| using Android.Content; | ||||
| using Android.OS; | ||||
| using AndroidX.Core.Content; | ||||
| using KeePassLib.Serialization; | ||||
| 
 | ||||
| namespace keepass2android | ||||
| @@ -39,7 +40,7 @@ namespace keepass2android | ||||
| 			_intentReceiver = new LockCloseActivityBroadcastReceiver(this); | ||||
| 			IntentFilter filter = new IntentFilter(); | ||||
| 			filter.AddAction(Intents.DatabaseLocked); | ||||
| 			RegisterReceiver(_intentReceiver, filter, ReceiverFlags.Exported); | ||||
|             ContextCompat.RegisterReceiver(this, _intentReceiver, filter, (int)ReceiverFlags.Exported); | ||||
| 		} | ||||
| 
 | ||||
| 		protected override void OnResume() { | ||||
| @@ -1,7 +1,7 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||||
| 			android:versionCode="200" | ||||
| 			android:versionName="1.11-r0" | ||||
| 			android:versionCode="201" | ||||
| 			android:versionName="1.12-r0" | ||||
| 			package="keepass2android.keepass2android" | ||||
| 			xmlns:tools="http://schemas.android.com/tools" | ||||
| 			android:installLocation="auto"> | ||||
| @@ -65,6 +65,7 @@ using Enum = System.Enum; | ||||
| using Exception = System.Exception; | ||||
| using String = System.String; | ||||
| using Toolbar = AndroidX.AppCompat.Widget.Toolbar; | ||||
| using AndroidX.Core.Content; | ||||
| 
 | ||||
| namespace keepass2android | ||||
| { | ||||
| @@ -647,7 +648,7 @@ namespace keepass2android | ||||
| 		    _intentReceiver = new PasswordActivityBroadcastReceiver(this); | ||||
| 			IntentFilter filter = new IntentFilter(); | ||||
| 			filter.AddAction(Intent.ActionScreenOff); | ||||
| 			RegisterReceiver(_intentReceiver, filter, ReceiverFlags.Exported); | ||||
|             ContextCompat.RegisterReceiver(this, _intentReceiver, filter, (int)ReceiverFlags.Exported); | ||||
| 
 | ||||
| 
 | ||||
|             //use FlagSecure to make sure the last (revealed) character of the master password is not visible in recent apps | ||||
| @@ -34,6 +34,7 @@ using keepass2android; | ||||
| using KeePassLib; | ||||
| using KeePassLib.Serialization; | ||||
| using Toolbar = AndroidX.AppCompat.Widget.Toolbar; | ||||
| using AndroidX.Core.Content; | ||||
| 
 | ||||
| namespace keepass2android | ||||
| { | ||||
| @@ -153,7 +154,7 @@ namespace keepass2android | ||||
| 			_intentReceiver = new QuickUnlockBroadcastReceiver(this); | ||||
| 			IntentFilter filter = new IntentFilter(); | ||||
| 			filter.AddAction(Intents.DatabaseLocked); | ||||
| 			RegisterReceiver(_intentReceiver, filter, ReceiverFlags.Exported); | ||||
|             ContextCompat.RegisterReceiver(this, _intentReceiver, filter, (int)ReceiverFlags.Exported); | ||||
| 
 | ||||
|             Util.SetNoPersonalizedLearning(FindViewById<EditText>(Resource.Id.QuickUnlock_password)); | ||||
| 
 | ||||
| Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB | 
| Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB | 
| Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB | 
| Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |