Compare commits
	
		
			39 Commits
		
	
	
		
			v1.12-r6b
			...
			v1.12-r9-b
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | ae2cfde897 | ||
|   | 42c66670b8 | ||
|   | 288539b902 | ||
|   | 61fd32f121 | ||
|   | 43108ec4a6 | ||
|   | 51089c6b98 | ||
|   | cf18fcf91c | ||
|   | da0513c768 | ||
|   | 37f520cdbe | ||
|   | c98572bee0 | ||
|   | b1774ffc4b | ||
|   | 57aaa0c4cd | ||
|   | b961ae1b33 | ||
|   | 5e418e2b1b | ||
|   | 6d22a213f3 | ||
|   | a76addc43f | ||
|   | 1d96217713 | ||
|   | d2b8fdcfff | ||
|   | 507b671448 | ||
|   | 3118ffaeb5 | ||
|   | 0abe29bd77 | ||
|   | f3a7831390 | ||
|   | 37cd58f7ba | ||
|   | 7dd80a8ef7 | ||
|   | c78636264b | ||
|   | 035506a5a3 | ||
|   | 4cf46ef062 | ||
|   | c7b8063171 | ||
|   | 0a8b149c9a | ||
|   | 9240a27791 | ||
|   | e90d5b903c | ||
|   | 50b4a9f1b9 | ||
|   | 9783c3b5fe | ||
|   | 7a837e3237 | ||
|   | c8f6714373 | ||
|   | bc0313aa6a | ||
|   | 0f98668bcd | ||
|   | 0aa78ffd66 | ||
|   | c1dbf171f5 | 
							
								
								
									
										31
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										31
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							| @@ -78,7 +78,7 @@ jobs: | ||||
|  | ||||
|   #   - name: Build keepass2android (net) | ||||
|   #     run: | | ||||
|   #       make msbuild Flavor=Net | ||||
|   #       make dotnetbuild Flavor=Net | ||||
|  | ||||
|   #   - name: Build APK (net) | ||||
|   #     run: | | ||||
| @@ -96,7 +96,7 @@ jobs: | ||||
|  | ||||
|   #   - name: Build keepass2android (nonet) | ||||
|   #     run: | | ||||
|   #       make msbuild Flavor=NoNet | ||||
|   #       make dotnetbuild Flavor=NoNet | ||||
|  | ||||
|   #   - name: Build APK (nonet) | ||||
|   #     run: | | ||||
| @@ -212,7 +212,7 @@ jobs: | ||||
|  | ||||
|   #   - name: Build keepass2android (net) | ||||
|   #     run: | | ||||
|   #       make msbuild Flavor=Net | ||||
|   #       make dotnetbuild Flavor=Net | ||||
|  | ||||
|   #   - name: Build APK (net) | ||||
|   #     run: | | ||||
| @@ -230,7 +230,7 @@ jobs: | ||||
|  | ||||
|   #   - name: Build keepass2android (nonet) | ||||
|   #     run: | | ||||
|   #       make msbuild Flavor=NoNet | ||||
|   #       make dotnetbuild Flavor=NoNet | ||||
|  | ||||
|   #   - name: Build APK (nonet) | ||||
|   #     run: | | ||||
| @@ -279,8 +279,8 @@ jobs: | ||||
|       with: | ||||
|         minimum-size: 8GB | ||||
|  | ||||
|     - name: Add msbuild to PATH | ||||
|       uses: microsoft/setup-msbuild@v2 | ||||
|     - name: Add dotnetbuild to PATH | ||||
|       uses: microsoft/setup-dotnetbuild@v2 | ||||
|       # If we want to also have nmake, use this instead | ||||
|       #uses: ilammy/msvc-dev-cmd@v1 | ||||
|  | ||||
| @@ -309,12 +309,20 @@ jobs: | ||||
|       run: | | ||||
|         make java | ||||
|  | ||||
|     - name: Update dotnet workloads | ||||
|       run: | | ||||
|         dotnet workload update         | ||||
|  | ||||
|     - name: Select the manifest | ||||
|       run: | | ||||
|         make manifestlink Flavor=Net | ||||
|  | ||||
|     - name: Install NuGet dependencies (net) | ||||
|       run: make nuget Flavor=Net | ||||
|  | ||||
|     - name: Build keepass2android (net) | ||||
|       run: | | ||||
|         make msbuild Flavor=Net | ||||
|         make dotnetbuild Flavor=Net | ||||
|  | ||||
|     - name: Build APK (net) | ||||
|       run: | | ||||
| @@ -327,12 +335,17 @@ jobs: | ||||
|         path: | | ||||
|           src/keepass2android/bin/*/*-Signed.apk | ||||
|  | ||||
|     - name: Select the manifest | ||||
|       run: | | ||||
|         make manifestlink Flavor=NoNet | ||||
|  | ||||
|     - name: Install NuGet dependencies (nonet) | ||||
|       run: make nuget Flavor=NoNet | ||||
|  | ||||
|     - name: Build keepass2android (nonet) | ||||
|       run: | | ||||
|         make msbuild Flavor=NoNet | ||||
|         make dotnetbuild Flavor=NoNet | ||||
|  | ||||
|     - name: Test Autofill | ||||
|       working-directory: ./src/Kp2aAutofillParser.Tests | ||||
|       run: dotnet test | ||||
| @@ -348,5 +361,3 @@ jobs: | ||||
|         path: | | ||||
|           src/keepass2android/bin/*/*-Signed.apk | ||||
|  | ||||
|     - name: Perform "make distclean" | ||||
|       run: make distclean | ||||
|   | ||||
| @@ -1,19 +1,21 @@ | ||||
| name: Create keepass2android release | ||||
| env: | ||||
|   NAME: 'ReleaseNet' | ||||
|   NAME: 'Release' | ||||
| 
 | ||||
| on: | ||||
|   release: | ||||
|     types: [published]  # Trigger when a new GitHub release is published | ||||
|   workflow_dispatch: # For manual testing | ||||
| 
 | ||||
|   push: | ||||
|     tags: | ||||
|       - "v1.*" | ||||
| jobs: | ||||
| 
 | ||||
|   build-release: | ||||
| 
 | ||||
|     runs-on: windows-2022 | ||||
| 
 | ||||
| 
 | ||||
|     strategy: | ||||
|       matrix: | ||||
|         flavor: [Net, NoNet] | ||||
|         target: [apk, apk_split] | ||||
| 
 | ||||
|     steps: | ||||
|      | ||||
| @@ -52,7 +54,7 @@ jobs: | ||||
|       with: | ||||
|         minimum-size: 8GB | ||||
| 
 | ||||
|     - name: Add msbuild to PATH | ||||
|     - name: Add msbuild/dotnet to PATH | ||||
|       uses: microsoft/setup-msbuild@v2 | ||||
|       # If we want to also have nmake, use this instead | ||||
|       #uses: ilammy/msvc-dev-cmd@v1 | ||||
| @@ -76,49 +78,53 @@ jobs: | ||||
|       run: | | ||||
|         make java | ||||
| 
 | ||||
|     - name: Install NuGet dependencies (net) | ||||
|       run: make nuget Flavor=Net | ||||
| 
 | ||||
|     - name: Use the _net manifest | ||||
|     - name: Update dotnet workloads | ||||
|       run: | | ||||
|         make manifestlink Flavor=Net | ||||
|         dotnet workload update         | ||||
| 
 | ||||
|     - name: Select the manifest | ||||
|       run: | | ||||
|         make manifestlink Flavor=${{ matrix.flavor }} | ||||
| 
 | ||||
|     - name: Install NuGet dependencies | ||||
|       run: make nuget Flavor=${{ matrix.flavor }} | ||||
| 
 | ||||
|     - name: List apks | ||||
|       run:  find . -type f -name "*.apk" | ||||
|       shell: bash | ||||
| 
 | ||||
|     - name: Build APK (net) | ||||
|       env: | ||||
|         KeyStore: "${{ github.workspace }}/kp2a.keystore" | ||||
|         MyAndroidSigningStorePass: ${{ secrets.KEY_STORE_PASSWORD }} | ||||
|         MyAndroidSigningKeyPass: ${{ secrets.KEY_PASSWORD }} | ||||
|       run: | | ||||
|         make Configuration=Release Flavor=Net | ||||
|         DropboxAppKey: ${{ secrets.DROPBOX_APP_KEY }} | ||||
|         DropboxAppSecret: ${{ secrets.DROPBOX_APP_SECRET }} | ||||
|         DropboxAppFolderAppKey: ${{ secrets.DROPBOX_APP_FOLDER_APP_KEY }} | ||||
|         DropboxAppFolderAppSecret: ${{ secrets.DROPBOX_APP_FOLDER_APP_SECRET }} | ||||
| 
 | ||||
|     - name: List files | ||||
|       run: | | ||||
|         make ${{ matrix.target }} Configuration=Release Flavor=${{ matrix.flavor }} | ||||
|      | ||||
|     - name: List apks | ||||
|       run:  find . -type f -name "*.apk" | ||||
|       shell: bash | ||||
|       run: | | ||||
|         ls src/keepass2android-app/bin/**/*.* | ||||
| 
 | ||||
|     - name: Archive production artifacts (net) | ||||
|      | ||||
|     - name: Archive production artifacts | ||||
|       uses: actions/upload-artifact@v4 | ||||
|       with: | ||||
|         name: signed APK ('net' built on ${{ github.job }}) | ||||
|         name: keepass2android_${{ matrix.target }}_${{ matrix.flavor }} | ||||
|         path: | | ||||
|           src/keepass2android-app/bin/Release/net8.0-android/*-Signed.apk | ||||
|           src/keepass2android-app/bin/Release/net8.0-android/publish/*.apk | ||||
|           src/keepass2android-app/bin/Release/net8.0-android/*/publish/*.apk | ||||
|      | ||||
|     - name: Upload APK to GitHub Release | ||||
|       uses: softprops/action-gh-release@v2 | ||||
|       if: github.ref_type == 'tag' | ||||
|       with: | ||||
|         files: | | ||||
|             src/keepass2android-app/bin/Release/net8.0-android/*-Signed.apk | ||||
| 
 | ||||
|     - name: Run checksum action | ||||
|       uses: thewh1teagle/checksum@v2 | ||||
|       with: | ||||
|         pre-release: true | ||||
|         file-name: 'apk-checksum-sha256.txt' | ||||
|         patterns: |  | ||||
|           src/keepass2android-app/bin/Release/net8.0-android/*-Signed.apk | ||||
|         algorithm: sha256  | ||||
|       env: | ||||
|         GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||||
|     - name: List apks | ||||
|       run:  find . -type f -name "*.apk" | ||||
|       shell: bash | ||||
|        | ||||
|     #- name: Upload APK to GitHub Release | ||||
|     #  uses: softprops/action-gh-release@v2 | ||||
|     #  if: github.ref_type == 'tag' | ||||
|     #  with: | ||||
|     #    files: | | ||||
|     #        src/keepass2android-app/bin/Release/net8.0-android/*/publish/*.apk src/keepass2android-app/bin/Release/net8.0-android/publish/*.apk | ||||
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -64,7 +64,7 @@ Thumbs.db | ||||
| /src/java/android-filechooser/code/projectzip/project.zip | ||||
| /src/java/android-filechooser/code/unused.txt | ||||
|  | ||||
| /src/Kp2aBusinessLogic/Io/DropboxFileStorageKeys.cs | ||||
| /src/Kp2aBusinessLogic/Io/DropboxFileStorage.g.cs | ||||
|  | ||||
| /src/java/workspace/DriveTest | ||||
|  | ||||
|   | ||||
							
								
								
									
										25
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								Makefile
									
									
									
									
									
								
							| @@ -62,11 +62,11 @@ $(info ) | ||||
|  | ||||
| # On linux use xabuild, on Windows use MSBuild.exe, otherwise (macos?) use msbuild. | ||||
| ifeq ($(detected_OS),Linux) | ||||
|   MSBUILD_binary := xabuild | ||||
|   MSBUILD := $(shell $(WHICH) $(MSBUILD_binary)) | ||||
|   MSBUILD_binary := dotnet | ||||
|   MSBUILD := $(shell $(WHICH) $(MSBUILD_binary)) publish | ||||
| else ifeq ($(detected_OS),Windows) | ||||
|   MSBUILD_binary := MSBuild.exe | ||||
|   MSBUILD := $(shell $(WHICH) $(MSBUILD_binary) 2> nul) | ||||
|   MSBUILD_binary := dotnet | ||||
|   MSBUILD := $(shell $(WHICH) $(MSBUILD_binary) 2> nul) publish | ||||
|   ifeq ($(MSBUILD),) | ||||
|     # Additional heuristic to find MSBUILD_BINARY on Windows | ||||
|     VSWHERE := "%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" | ||||
| @@ -312,19 +312,20 @@ manifestlink: | ||||
| 	$(CREATE_MANIFEST_LINK)	 | ||||
|  | ||||
| ##### | ||||
| src/Kp2aBusinessLogic/Io/DropboxFileStorageKeys.cs: | ||||
| ifeq ($(detected_OS),Windows) | ||||
| 	$(CP) src\Kp2aBusinessLogic\Io\DropboxFileStorageKeysDummy.cs src\Kp2aBusinessLogic\Io\DropboxFileStorageKeys.cs | ||||
| else | ||||
| 	$(CP) src/Kp2aBusinessLogic/Io/DropboxFileStorageKeysDummy.cs $@ | ||||
| endif | ||||
|  | ||||
| msbuild: manifestlink native java nuget src/Kp2aBusinessLogic/Io/DropboxFileStorageKeys.cs | ||||
| msbuild: manifestlink native java nuget  | ||||
| 	$(MSBUILD) src/KeePass.sln -target:keepass2android-app -p:AndroidSdkDirectory="$(ANDROID_SDK_ROOT)" -p:BuildProjectReferences=true $(MSBUILD_PARAM) -p:Platform="Any CPU" -m | ||||
|  | ||||
| apk: msbuild  | ||||
| apk: manifestlink native java nuget   | ||||
| 	$(MSBUILD) src/keepass2android-app/keepass2android-app.csproj -p:AndroidSdkDirectory="$(ANDROID_SDK_ROOT)" -t:SignAndroidPackage $(MSBUILD_PARAM) -p:Platform=AnyCPU -m  | ||||
|  | ||||
| apk_split: manifestlink native java nuget  | ||||
| 	$(MSBUILD) src/keepass2android-app/keepass2android-app.csproj -p:AndroidSdkDirectory="$(ANDROID_SDK_ROOT)" -t:SignAndroidPackage $(MSBUILD_PARAM) -p:Platform=AnyCPU -m -p:RuntimeIdentifier=android-arm | ||||
| 	$(MSBUILD) src/keepass2android-app/keepass2android-app.csproj -p:AndroidSdkDirectory="$(ANDROID_SDK_ROOT)" -t:SignAndroidPackage $(MSBUILD_PARAM) -p:Platform=AnyCPU -m -p:RuntimeIdentifier=android-arm64 | ||||
| 	$(MSBUILD) src/keepass2android-app/keepass2android-app.csproj -p:AndroidSdkDirectory="$(ANDROID_SDK_ROOT)" -t:SignAndroidPackage $(MSBUILD_PARAM) -p:Platform=AnyCPU -m -p:RuntimeIdentifier=android-x86 | ||||
| 	$(MSBUILD) src/keepass2android-app/keepass2android-app.csproj -p:AndroidSdkDirectory="$(ANDROID_SDK_ROOT)" -t:SignAndroidPackage $(MSBUILD_PARAM) -p:Platform=AnyCPU -m -p:RuntimeIdentifier=android-x64 | ||||
| 	src/build-scripts/rename-output-apks.sh src/keepass2android-app/bin/Release/net8.0-android/ | ||||
|  | ||||
| build_all: msbuild | ||||
|  | ||||
| ##### Cleanup targets | ||||
|   | ||||
| @@ -95,7 +95,7 @@ namespace Kp2aAutofillParserTest | ||||
|             StructureParserBase<TestInputField> parser = | ||||
|                 new StructureParserBase<TestInputField>(new TestLogger(), new TestDalSourceTrustAll()); | ||||
|  | ||||
|             var result = parser.ParseForFill(false, autofillView); | ||||
|             var result = parser.ParseForFill(autofillView); | ||||
|             if (expectedPackageName != null) | ||||
|                 Assert.Equal(expectedPackageName, result.PackageName); | ||||
|             if (expectedWebDomain != null) | ||||
|   | ||||
| @@ -58,7 +58,8 @@ | ||||
|       "IsFocused": false, | ||||
|       "InputType": 97, | ||||
|       "HtmlInfoTag": null, | ||||
|       "HtmlInfoTypeAttribute": null | ||||
|       "HtmlInfoTypeAttribute": null, | ||||
|       "ExpectedAssignedHints": [ "username" ] | ||||
|     }, | ||||
|     { | ||||
|       "IdEntry": "password_text_input_layout", | ||||
| @@ -81,6 +82,7 @@ | ||||
|       "InputType": 129, | ||||
|       "HtmlInfoTag": null, | ||||
|       "HtmlInfoTypeAttribute": null, | ||||
|       "ExpectedAssignedHints": [ "password" ] | ||||
|  | ||||
|     }, | ||||
|     { | ||||
|   | ||||
| @@ -476,8 +476,16 @@ namespace Kp2aAutofillParser | ||||
|  | ||||
|             foreach (var field in autofillFields.HintMap.Values.Distinct()) | ||||
|             { | ||||
|                 if (field == null || field.AutofillHints == null) | ||||
|                 { | ||||
|                     continue; | ||||
|                 } | ||||
|                 foreach (var hint in field.AutofillHints) | ||||
|                 { | ||||
|                     if (hint == null) | ||||
|                     { | ||||
|                         continue; | ||||
|                     } | ||||
|                     if (GetPartitionIndex(hint) == partitionIndex) | ||||
|                     { | ||||
|                         filteredCollection.Add(field); | ||||
| @@ -793,14 +801,14 @@ namespace Kp2aAutofillParser | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         public AutofillTargetId ParseForFill(bool isManual, AutofillView<FieldT> autofillView) | ||||
|         public AutofillTargetId ParseForFill(AutofillView<FieldT> autofillView) | ||||
|         { | ||||
|             return Parse(true, isManual, autofillView); | ||||
|             return Parse(true, autofillView); | ||||
|         } | ||||
|  | ||||
|         public AutofillTargetId ParseForSave(AutofillView<FieldT> autofillView) | ||||
|         { | ||||
|             return Parse(false, true, autofillView); | ||||
|             return Parse(false, autofillView); | ||||
|         } | ||||
|  | ||||
|         /// <summary> | ||||
| @@ -808,8 +816,7 @@ namespace Kp2aAutofillParser | ||||
|         /// </summary> | ||||
|         /// <returns>The parse.</returns> | ||||
|         /// <param name="forFill">If set to <c>true</c> for fill.</param> | ||||
|         /// <param name="isManualRequest"></param> | ||||
|         protected virtual AutofillTargetId Parse(bool forFill, bool isManualRequest, AutofillView<FieldT> autofillView) | ||||
|         protected virtual AutofillTargetId Parse(bool forFill, AutofillView<FieldT> autofillView) | ||||
|         { | ||||
|             AutofillTargetId result = new AutofillTargetId() | ||||
|             { | ||||
| @@ -876,8 +883,9 @@ namespace Kp2aAutofillParser | ||||
|                      | ||||
|                 } | ||||
|  | ||||
|                 //for "heuristic determination" we demand that one of the filled fields is focused: | ||||
|                 if (passwordFields.Concat(usernameFields).Any(f => f.IsFocused)) | ||||
|                 //for "heuristic determination" we demand that there is a password field or one of the username fields is focused: | ||||
|                 //Note that "IsFocused" might be false even when tapping the field. It might require long-press to autofill. | ||||
|                 if (passwordFields.Any() || usernameFields.Any(f => f.IsFocused)) | ||||
|                 { | ||||
|                     foreach (var uf in usernameFields) | ||||
|                         AddFieldToHintMap(uf, new string[] { AutofillHintsHelper.AutofillHintUsername }); | ||||
|   | ||||
| @@ -1,13 +0,0 @@ | ||||
| namespace keepass2android.Io | ||||
| { | ||||
| 	public partial class DropboxFileStorage | ||||
| 	{ | ||||
| 		private const string AppKey = "dummy"; | ||||
| 		private const string AppSecret = "dummy"; | ||||
| 	} | ||||
| 	public partial class DropboxAppFolderFileStorage | ||||
| 	{ | ||||
| 		private const string AppKey = "dummy"; | ||||
| 		private const string AppSecret = "dummy"; | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										27
									
								
								src/Kp2aBusinessLogic/Io/GenerateSecrets.targets
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								src/Kp2aBusinessLogic/Io/GenerateSecrets.targets
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | ||||
| <Project> | ||||
|   <Target Name="GenerateDropboxSecrets" BeforeTargets="BeforeCompile" | ||||
|   Inputs="@(DropboxSecretLines)" | ||||
|   Outputs="DropboxFileStorage.g.cs"> | ||||
|  | ||||
|     <WriteLinesToFile | ||||
|     File="Io/DropboxFileStorage.g.cs" | ||||
|       Lines="@(DropboxSecretLines->'%(Text)')" | ||||
|       Overwrite="true" | ||||
|       /> | ||||
|   </Target> | ||||
|  | ||||
|   <ItemGroup> | ||||
|     <DropboxSecretLines Include="GeneratedDropboxSecrets"> | ||||
|       <Text>namespace keepass2android.Io { | ||||
|     public partial class DropboxFileStorage { | ||||
|       private const string AppKey = "$(DropboxAppKey)"; | ||||
|       private const string AppSecret = "$(DropboxAppSecret)"; | ||||
|     } | ||||
|     public partial class DropboxAppFolderFileStorage { | ||||
|       private const string AppKey = "$(DropboxAppFolderAppKey)"; | ||||
|       private const string AppSecret = "$(DropboxAppFolderAppSecret)"; | ||||
|     } | ||||
|   }</Text> | ||||
|     </DropboxSecretLines> | ||||
|   </ItemGroup> | ||||
| </Project> | ||||
| @@ -4,30 +4,43 @@ | ||||
|     <SupportedOSPlatformVersion>21</SupportedOSPlatformVersion> | ||||
|     <Nullable>enable</Nullable> | ||||
|     <ImplicitUsings>enable</ImplicitUsings> | ||||
|     <DefineConstants Condition="'$(Flavor)'=='NoNet'">NO_QR_SCANNER;EXCLUDE_JAVAFILESTORAGE;NoNet</DefineConstants> | ||||
|   </PropertyGroup> | ||||
|   <ItemGroup> | ||||
|     <Folder Include="Resources\" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <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.Identity.Client" Version="4.67.1" /> | ||||
|     <PackageReference Include="FluentFTP" Version="51.1.0" Condition="'$(Flavor)'!='NoNet'"/> | ||||
|     <PackageReference Include="MegaApiClient" Version="1.10.4"  Condition="'$(Flavor)'!='NoNet'"/> | ||||
|     <PackageReference Include="Microsoft.Graph" Version="5.68.0" Condition="'$(Flavor)'!='NoNet'"/> | ||||
|     <PackageReference Include="Microsoft.Identity.Client" Version="4.67.1" Condition="'$(Flavor)'!='NoNet'"/> | ||||
|     <PackageReference Include="Xamarin.AndroidX.Browser" Version="1.8.0" /> | ||||
|     <PackageReference Include="Xamarin.AndroidX.Core" Version="1.13.1.5" /> | ||||
|     <PackageReference Include="Xamarin.Google.Android.Material" Version="1.11.0.3" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ProjectReference Include="..\AndroidFileChooserBinding\AndroidFileChooserBinding.csproj" /> | ||||
|     <ProjectReference Include="..\JavaFileStorageBindings\JavaFileStorageBindings.csproj" /> | ||||
|     <ProjectReference Include="..\JavaFileStorageBindings\JavaFileStorageBindings.csproj" Condition="'$(Flavor)'!='NoNet'"  /> | ||||
|     <ProjectReference Include="..\KeePassLib2Android\KeePassLib2Android.csproj" /> | ||||
|     <ProjectReference Include="..\KP2AKdbLibraryBinding\KP2AKdbLibraryBinding.csproj" /> | ||||
|     <ProjectReference Include="..\TwofishCipher\TwofishCipher.csproj" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|   <None Remove="Io/DropboxFileStorageKeysDummy.cs" /> | ||||
|   <Compile Remove="Io/DropboxFileStorageKeysDummy.cs" /> | ||||
|   <Content Remove="Io/DropboxFileStorageKeysDummy.cs" /> | ||||
|  | ||||
| </ItemGroup> | ||||
| <ItemGroup  Condition="'$(Flavor)'=='NoNet'"> | ||||
|   <None Remove="Io/OneDrive2FileStorage.cs" /> | ||||
|   <Compile Remove="Io/OneDrive2FileStorage.cs" /> | ||||
|   <Content Remove="Io/OneDrive2FileStorage.cs" /> | ||||
|   <None Remove="Io/MegaFileStorage.cs" /> | ||||
|   <Compile Remove="Io/MegaFileStorage.cs" /> | ||||
|   <Content Remove="Io/MegaFileStorage.cs" /> | ||||
| </ItemGroup> | ||||
|  | ||||
| <Import Project="Io/GenerateSecrets.targets" /> | ||||
| <ItemGroup> | ||||
| <Compile Include="Io/DropboxFileStorage.g.cs" /> | ||||
| </ItemGroup> | ||||
|  | ||||
|    | ||||
| </Project> | ||||
| @@ -15,7 +15,14 @@ namespace KeePass.Util | ||||
|             string errorMessage = e.Message; | ||||
|             if (e is Java.Lang.Exception javaException) | ||||
|             { | ||||
|                 errorMessage = javaException.LocalizedMessage ?? javaException.Message ?? errorMessage; | ||||
|                 try | ||||
|                 { | ||||
|                     errorMessage = javaException.LocalizedMessage ?? javaException.Message ?? errorMessage; | ||||
|                 } | ||||
|                 finally | ||||
|                 { | ||||
|  | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             return errorMessage; | ||||
|   | ||||
| @@ -20,7 +20,6 @@ git clone --recurse-submodules https://github.com/PhilippC/keepass2android.git | ||||
| cd keepass2android/src/build-scripts | ||||
| ./build-java.sh && ./build-native.sh | ||||
| cd .. | ||||
| cp Kp2aBusinessLogic/Io/DropboxFileStorageKeysDummy.cs Kp2aBusinessLogic/Io/DropboxFileStorageKeys.cs | ||||
| cd keepass2android-app | ||||
| ln -s Manifests/AndroidManifest_debug.xml AndroidManifest.xml | ||||
| dotnet workload restore | ||||
|   | ||||
							
								
								
									
										22
									
								
								src/build-scripts/rename-output-apks.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/build-scripts/rename-output-apks.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| #!/usr/bin/env bash | ||||
|  | ||||
| BASE_DIR="${1}" | ||||
|  | ||||
| for arch_dir in "$BASE_DIR"/android-*/; do | ||||
|   arch=$(basename "$arch_dir") | ||||
|   arch=${arch#android-} | ||||
|   APK_DIR="${arch_dir}publish" | ||||
|   if [[ -d "$APK_DIR" ]]; then | ||||
|     apk_path=$(find "$APK_DIR" -maxdepth 1 -type f -name "*.apk" | head -n1) | ||||
|     if [[ -n "$apk_path" ]]; then | ||||
|       base=$(basename "$apk_path" .apk) | ||||
|       new_path="$APK_DIR/${base}-${arch}.apk" | ||||
|       mv "$apk_path" "$new_path" | ||||
|       echo "Renamed $apk_path to $new_path" | ||||
|     else | ||||
|       echo "No APK found in $APK_DIR" | ||||
|     fi | ||||
|   else | ||||
|     echo "Directory $APK_DIR does not exist" | ||||
|   fi | ||||
| done | ||||
| @@ -6,8 +6,7 @@ | ||||
|         android:allowBackup="true" | ||||
|         android:icon="@mipmap/ic_launcher" | ||||
|         android:label="@string/app_name" | ||||
|         android:supportsRtl="true" | ||||
|         android:theme="@style/AppTheme"> | ||||
|         android:supportsRtl="true"> | ||||
|         <activity android:name="com.crocoapps.javafilestoragetest2.MainActivity" | ||||
|                   android:exported="true"> | ||||
|             <intent-filter> | ||||
|   | ||||
| @@ -14,7 +14,7 @@ using keepass2android; | ||||
|  | ||||
| namespace keepass2android | ||||
| { | ||||
| 	[Activity(Label = AppNames.AppName)] | ||||
| 	[Activity(Label = AppNames.AppName, Theme = "@style/Kp2aTheme_BlueNoActionBar")] | ||||
| 	public class AppKilledInfo : Activity, IDialogInterfaceOnDismissListener | ||||
| 	{ | ||||
| 		protected override void OnCreate(Bundle bundle) | ||||
|   | ||||
| @@ -19,7 +19,7 @@ using keepass2android.services.AutofillBase; | ||||
|  | ||||
| namespace keepass2android | ||||
| { | ||||
|     [Activity(Label = "DisableAutofillForQueryActivity")] | ||||
|     [Activity(Label = "DisableAutofillForQueryActivity", Theme = "@style/Kp2aTheme_ActionBar")] | ||||
|     public class DisableAutofillForQueryActivity : Activity | ||||
|     { | ||||
|         public IAutofillIntentBuilder IntentBuilder = new Kp2aAutofillIntentBuilder(); | ||||
| @@ -63,8 +63,6 @@ namespace keepass2android | ||||
|  | ||||
|             prefs.Edit().PutStringSet("AutoFillDisabledQueries", disabledValues).Commit(); | ||||
|  | ||||
|             bool isManual = Intent.GetBooleanExtra(ChooseForAutofillActivityBase.ExtraIsManualRequest, false); | ||||
|              | ||||
|             Intent reply = new Intent(); | ||||
|             FillResponse.Builder builder = new FillResponse.Builder(); | ||||
|             AssistStructure structure = (AssistStructure)Intent.GetParcelableExtra(AutofillManager.ExtraAssistStructure); | ||||
| @@ -77,7 +75,7 @@ namespace keepass2android | ||||
|             StructureParser parser = new StructureParser(this, structure); | ||||
|             try | ||||
|             { | ||||
|                 parser.ParseForFill(isManual); | ||||
|                 parser.ParseForFill(); | ||||
|  | ||||
|             } | ||||
|             catch (Java.Lang.SecurityException e) | ||||
|   | ||||
| @@ -37,8 +37,10 @@ using System.Net; | ||||
| using System.Text; | ||||
| using Android.Content.Res; | ||||
| using Android.Database; | ||||
| #if !NO_QR_SCANNER | ||||
| using Android.Gms.Common; | ||||
| using Android.Gms.Tasks; | ||||
| #endif | ||||
| using Android.Graphics; | ||||
| using Android.Graphics.Drawables; | ||||
| using Android.Runtime; | ||||
| @@ -55,10 +57,11 @@ using Object = Java.Lang.Object; | ||||
| using Uri = Android.Net.Uri; | ||||
| using Resource = keepass2android.Resource; | ||||
| using Google.Android.Material.TextField; | ||||
| #if !NO_QR_SCANNER | ||||
| using Xamarin.Google.MLKit.Vision.Barcode.Common; | ||||
| using Xamarin.Google.MLKit.Vision.CodeScanner; | ||||
| #endif | ||||
| using Console = System.Console; | ||||
| using Task = Android.Gms.Tasks.Task; | ||||
|  | ||||
| namespace keepass2android | ||||
| { | ||||
| @@ -1158,8 +1161,10 @@ 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) => | ||||
| #if NO_QR_SCANNER | ||||
|             dlgView.FindViewById<Button>(Resource.Id.totp_scan).Visibility = ViewStates.Gone; | ||||
| #else | ||||
| 			dlgView.FindViewById<Button>(Resource.Id.totp_scan).Click += async (object o, EventArgs args) => | ||||
|             { | ||||
|                 if (GoogleApiAvailability.Instance.IsGooglePlayServicesAvailable(this) != ConnectionResult.Success) | ||||
|                 { | ||||
| @@ -1194,6 +1199,7 @@ namespace keepass2android | ||||
|  | ||||
|  | ||||
|             }; | ||||
| #endif | ||||
|  | ||||
| 			//copy values from entry into dialog | ||||
| 			View ees = (View)sender.Parent; | ||||
| @@ -1572,6 +1578,7 @@ namespace keepass2android | ||||
|  | ||||
| 		} | ||||
| 	} | ||||
| #if !NO_QR_SCANNER | ||||
|     public class SuccessListener : Object, IOnSuccessListener | ||||
|     { | ||||
|         private readonly Action<Barcode> _onSuccess; | ||||
| @@ -1601,8 +1608,9 @@ namespace keepass2android | ||||
|             _onFailure?.Invoke(e); | ||||
|         } | ||||
|     } | ||||
| #endif | ||||
|  | ||||
|     public class DefaultEdit : EditModeBase | ||||
| 	public class DefaultEdit : EditModeBase | ||||
| 	{ | ||||
| 		 | ||||
| 	} | ||||
|   | ||||
| @@ -894,9 +894,14 @@ namespace keepass2android | ||||
|                     RegisterInfoTextDisplay( | ||||
|                         "DbReadOnly"); //this ensures that we don't show the general info texts too soon | ||||
|  | ||||
|                     FindViewById<TextView>(Resource.Id.dbreadonly_infotext_text).Text = | ||||
|                     (GetString(Resource.String.FileReadOnlyMessagePre) + " " + | ||||
|                      App.Kp2a.GetResourceString(reason.Result)); | ||||
|                     var infotext_view = FindViewById<TextView>(Resource.Id.dbreadonly_infotext_text); | ||||
|                     if (infotext_view != null) | ||||
|                     { | ||||
|                         infotext_view.Text = | ||||
|                             (GetString(Resource.String.FileReadOnlyMessagePre) + " " + | ||||
|                              App.Kp2a.GetResourceString(reason.Result)); | ||||
|                     } | ||||
|                      | ||||
|                 } | ||||
|             } | ||||
|             UpdateBottomBarElementVisibility(Resource.Id.dbreadonly_infotext, canShow); | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||||
| 			android:versionCode="210" | ||||
| 			android:versionName="1.12-r6b" | ||||
| 			package="keepass2android.keepass2android" | ||||
| 			xmlns:tools="http://schemas.android.com/tools" | ||||
| 			android:installLocation="auto"> | ||||
|       android:versionCode="217" | ||||
|       android:versionName="1.12-r9c" | ||||
|       package="keepass2android.keepass2android" | ||||
|       xmlns:tools="http://schemas.android.com/tools" | ||||
|       android:installLocation="auto"> | ||||
|  | ||||
|  | ||||
|   <queries> | ||||
| @@ -46,13 +46,11 @@ | ||||
|  | ||||
|   <permission android:description="@string/permission_desc2" android:icon="@drawable/ic_launcher" android:label="KP2A entry search" android:name="keepass2android.keepass2android.permission.KP2aInternalSearch" android:protectionLevel="signature" /> | ||||
|   <permission android:description="@string/permission_desc3" android:icon="@drawable/ic_launcher" android:label="KP2A choose autofill dataset" android:name="keepass2android.keepass2android.permission.Kp2aChooseAutofill" android:protectionLevel="signature" /> | ||||
|  | ||||
|   <application android:label="keepass2android" | ||||
| 	android:icon="@mipmap/ic_launcher_online" | ||||
| 	android:roundIcon="@mipmap/ic_launcher_online_round" | ||||
| 	android:networkSecurityConfig="@xml/network_security_config" | ||||
|  | ||||
| 	> | ||||
|     android:icon="@mipmap/ic_launcher_online" | ||||
|     android:roundIcon="@mipmap/ic_launcher_online_round" | ||||
|     android:networkSecurityConfig="@xml/network_security_config" | ||||
|   > | ||||
|  | ||||
|     <meta-data | ||||
|       android:name="com.google.mlkit.vision.DEPENDENCIES" | ||||
| @@ -107,16 +105,15 @@ | ||||
|       </intent-filter> | ||||
|     </activity> | ||||
|     <activity android:name="keepass2android.softkeyboard.InputLanguageSelection" | ||||
|                | ||||
|                android:exported="true"> | ||||
|       <!-- android:label="@string/language_selection_title" TODO  --> | ||||
|       <intent-filter> | ||||
|         <action android:name="android.intent.action.MAIN"/> | ||||
|         <action android:name="keepass2android.softkeyboard.INPUT_LANGUAGE_SELECTION"/> | ||||
|         <category android:name="android.intent.category.DEFAULT" /> | ||||
|       </intent-filter> | ||||
|     </activity> | ||||
|     <activity android:configChanges="orientation|keyboard|keyboardHidden" android:label="@string/app_name" android:theme="@style/Kp2aTheme_BlueNoActionBar" android:name="keepass2android.SelectCurrentDbActivity"  android:windowSoftInputMode="adjustResize" android:exported="true"> | ||||
|     <activity android:configChanges="orientation|keyboard|keyboardHidden" android:label="@string/app_name" android:theme="@style/Kp2aTheme_BlueNoActionBar" android:name="keepass2android.SelectCurrentDbActivity" android:windowSoftInputMode="adjustResize" | ||||
|     android:exported="true"> | ||||
|       <intent-filter android:label="@string/app_name"> | ||||
|         <action android:name="android.intent.action.VIEW" /> | ||||
|         <category android:name="android.intent.category.DEFAULT" /> | ||||
|   | ||||
| @@ -1,24 +1,27 @@ | ||||
| <?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"  | ||||
| 			package="keepass2android.keepass2android_nonet" | ||||
| 			xmlns:tools="http://schemas.android.com/tools" | ||||
| 			android:installLocation="auto"> | ||||
| 			 | ||||
| 			 | ||||
| <manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|       android:versionCode="217" | ||||
|       android:versionName="1.12-r9c" | ||||
|       package="keepass2android.keepass2android_nonet" | ||||
|       xmlns:tools="http://schemas.android.com/tools" | ||||
|       android:installLocation="auto"> | ||||
|  | ||||
|  | ||||
|   <queries> | ||||
|     <!-- Specific intents and packages we query for (required since Android 11) --> | ||||
|     <package android:name="keepass2android.plugin.keyboardswap2" /> | ||||
|     <package android:name="keepass2android.AncientIconSet" /> | ||||
| 	<package android:name="com.dropbox.android" /> | ||||
|     <package android:name="keepass2android.plugin.qr" /> | ||||
|     <package android:name="it.andreacioni.kp2a.plugin.keelink" /> | ||||
|     <package android:name="com.inputstick.apps.kp2aplugin" /> | ||||
|     <package android:name="com.dropbox.android" /> | ||||
|  | ||||
|     <intent> | ||||
|       <action android:name="android.intent.action.OPEN_DOCUMENT" /> | ||||
|       <data android:mimeType="*/*" /> | ||||
|     </intent> | ||||
|  | ||||
|     <intent> | ||||
|         <action android:name="android.intent.action.OPEN_DOCUMENT" /> | ||||
|         <data android:mimeType="*/*" /> | ||||
|       </intent> | ||||
| 	   | ||||
| 	  <intent> | ||||
|       <action android:name="android.intent.action.GET_DOCUMENT" /> | ||||
|       <data android:mimeType="*/*" /> | ||||
|     </intent> | ||||
| @@ -36,59 +39,57 @@ | ||||
|     </intent> | ||||
|  | ||||
|     <intent> | ||||
|         <action android:name="android.intent.action.VIEW" /> | ||||
| 	  </intent> | ||||
|   </queries>			 | ||||
| 			 | ||||
| 	<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="34" /> | ||||
|       <action android:name="android.intent.action.VIEW" /> | ||||
|     </intent> | ||||
|   </queries> | ||||
|   <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="34" /> | ||||
|  | ||||
|   <permission android:description="@string/permission_desc2" android:icon="@drawable/ic_launcher_offline" android:label="KP2A entry search" android:name="keepass2android.keepass2android_nonet.permission.KP2aInternalSearch" android:protectionLevel="signature" /> | ||||
|   <permission android:description="@string/permission_desc3" android:icon="@drawable/ic_launcher_offline" android:label="KP2A choose autofill dataset" android:name="keepass2android.keepass2android_nonet.permission.Kp2aChooseAutofill" android:protectionLevel="signature" /> | ||||
| 	<application  | ||||
| 		android:label="keepass2android"  | ||||
| 		android:icon="@mipmap/ic_launcher_offline" | ||||
| 		android:networkSecurityConfig="@xml/network_security_config" | ||||
| 	> | ||||
|   <application android:label="keepass2android" | ||||
|     android:icon="@mipmap/ic_launcher_offline" | ||||
|     android:roundIcon="@mipmap/ic_launcher_offline_round" | ||||
|     android:networkSecurityConfig="@xml/network_security_config" | ||||
|   > | ||||
|  | ||||
|     <meta-data | ||||
|       android:name="com.google.mlkit.vision.DEPENDENCIES" | ||||
|       android:value="barcode_ui"/> | ||||
|  | ||||
| 		<uses-library | ||||
|     <uses-library | ||||
|             android:name="org.apache.http.legacy" | ||||
|             android:required="false"/> | ||||
| 	 | ||||
| 		<provider android:name="group.pals.android.lib.ui.filechooser.providers.localfile.LocalFileProvider" android:authorities="keepass2android.keepass2android_nonet.android-filechooser.localfile" android:exported="false" /> | ||||
| 		<provider android:name="group.pals.android.lib.ui.filechooser.providers.history.HistoryProvider" android:authorities="keepass2android.keepass2android_nonet.android-filechooser.history" android:exported="false" /> | ||||
| 		<activity android:name="group.pals.android.lib.ui.filechooser.FileChooserActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenSize" android:screenOrientation="user" android:theme="@style/Afc.Theme.Light"> | ||||
| 		</activity> | ||||
|    | ||||
|     <provider android:name="group.pals.android.lib.ui.filechooser.providers.localfile.LocalFileProvider" android:authorities="keepass2android.keepass2android_nonet.android-filechooser.localfile" android:exported="false" /> | ||||
|     <provider android:name="group.pals.android.lib.ui.filechooser.providers.history.HistoryProvider" android:authorities="keepass2android.keepass2android_nonet.android-filechooser.history" android:exported="false" /> | ||||
|     <activity android:name="group.pals.android.lib.ui.filechooser.FileChooserActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenSize" android:screenOrientation="user" android:theme="@style/Afc.Theme.Light"> | ||||
|     </activity> | ||||
|  | ||||
| 		<service android:name="keepass2android.softkeyboard.KP2AKeyboard" android:permission="android.permission.BIND_INPUT_METHOD" android:exported="true"> | ||||
| 			<intent-filter> | ||||
| 				<action android:name="android.view.InputMethod" /> | ||||
| 			</intent-filter> | ||||
| 			<meta-data android:name="android.view.im" android:resource="@xml/method" /> | ||||
| 		</service> | ||||
| 		<activity android:name="keepass2android.softkeyboard.LatinIMESettings" android:label="@string/english_ime_settings" android:exported="true"> | ||||
| 			<intent-filter> | ||||
| 				<action android:name="android.intent.action.MAIN" /> | ||||
| 			</intent-filter> | ||||
| 			<intent-filter> | ||||
| 				<action android:name="keepass2android.softkeyboard.LatinIMESettings" /> | ||||
| 				<category android:name="android.intent.category.DEFAULT" /> | ||||
| 			</intent-filter> | ||||
| 		</activity> | ||||
| 		 <activity android:name="keepass2android.softkeyboard.InputLanguageSelection" | ||||
|                 android:label="@string/language_selection_title" | ||||
|                 android:exported="true"> | ||||
|             <intent-filter> | ||||
|                 <action android:name="android.intent.action.MAIN"/> | ||||
|                 <action android:name="keepass2android.softkeyboard.INPUT_LANGUAGE_SELECTION"/> | ||||
|                 <category android:name="android.intent.category.DEFAULT" /> | ||||
|             </intent-filter> | ||||
|         </activity> | ||||
|   | ||||
| 		<activity android:configChanges="orientation|keyboard|keyboardHidden" android:label="@string/app_name" android:theme="@style/Kp2aTheme_BlueNoActionBar" android:name="keepass2android.SelectCurrentDbActivity" android:windowSoftInputMode="adjustResize" | ||||
|               android:exported="true"> | ||||
|     <service android:name="keepass2android.softkeyboard.KP2AKeyboard" android:permission="android.permission.BIND_INPUT_METHOD" android:exported="true"> | ||||
|       <intent-filter> | ||||
|         <action android:name="android.view.InputMethod" /> | ||||
|       </intent-filter> | ||||
|       <meta-data android:name="android.view.im" android:resource="@xml/method" /> | ||||
|     </service> | ||||
|     <activity android:name="keepass2android.softkeyboard.LatinIMESettings" android:label="@string/english_ime_settings" android:exported="true"> | ||||
|       <intent-filter> | ||||
|         <action android:name="android.intent.action.MAIN" /> | ||||
|       </intent-filter> | ||||
|       <intent-filter> | ||||
|         <action android:name="keepass2android.softkeyboard.LatinIMESettings" /> | ||||
|         <category android:name="android.intent.category.DEFAULT" /> | ||||
|       </intent-filter> | ||||
|     </activity> | ||||
|     <activity android:name="keepass2android.softkeyboard.InputLanguageSelection" | ||||
|                android:exported="true"> | ||||
|       <intent-filter> | ||||
|         <action android:name="android.intent.action.MAIN"/> | ||||
|         <action android:name="keepass2android.softkeyboard.INPUT_LANGUAGE_SELECTION"/> | ||||
|         <category android:name="android.intent.category.DEFAULT" /> | ||||
|       </intent-filter> | ||||
|     </activity> | ||||
|     <activity android:configChanges="orientation|keyboard|keyboardHidden" android:label="@string/app_name" android:theme="@style/Kp2aTheme_BlueNoActionBar" android:name="keepass2android.SelectCurrentDbActivity" android:windowSoftInputMode="adjustResize" | ||||
|     android:exported="true"> | ||||
|       <intent-filter android:label="@string/app_name"> | ||||
|         <action android:name="android.intent.action.VIEW" /> | ||||
|         <category android:name="android.intent.category.DEFAULT" /> | ||||
| @@ -98,11 +99,11 @@ | ||||
|         <data android:host="*" /> | ||||
|       </intent-filter> | ||||
|  | ||||
| 	  <intent-filter> | ||||
|       <intent-filter> | ||||
|         <action android:name="kp2a.action.SelectCurrentDbActivity" /> | ||||
|         <category android:name="android.intent.category.DEFAULT" /> | ||||
|       </intent-filter> | ||||
| 	   | ||||
|  | ||||
|       <intent-filter android:label="@string/app_name"> | ||||
|         <action android:name="android.intent.action.SEND" /> | ||||
|         <action android:name="android.intent.action.SEND_MULTIPLE" /> | ||||
| @@ -112,7 +113,7 @@ | ||||
|         <data android:mimeType="application/*" /> | ||||
|       </intent-filter> | ||||
|  | ||||
| <!-- intent filter for opening database files  | ||||
|       <!-- intent filter for opening database files  | ||||
| Note that this stopped working nicely with Android 7, see e.g. https://stackoverflow.com/a/26635162/292233 | ||||
| KP2A was using  | ||||
| <data android:scheme="content" /> | ||||
| @@ -126,7 +127,7 @@ The scheme=file is still there for old OS devices. It's also queried by apps lik | ||||
| --> | ||||
|  | ||||
|  | ||||
| <!-- This intent filter is for apps which use content with a URI containing the extension but no specific mimeType, e.g. ASTRO file manager --> | ||||
|       <!-- This intent filter is for apps which use content with a URI containing the extension but no specific mimeType, e.g. ASTRO file manager --> | ||||
|  | ||||
|       <intent-filter android:label="@string/app_name"> | ||||
|         <action android:name="android.intent.action.VIEW" /> | ||||
| @@ -168,7 +169,7 @@ The scheme=file is still there for old OS devices. It's also queried by apps lik | ||||
|       </intent-filter> | ||||
|  | ||||
|       <!-- This intent filter is for apps which use content with a URI not containing the extension but at least specify mimeType=application/octet-stream, e.g. GoogleDrive or FolderSync --> | ||||
| <intent-filter android:label="@string/app_name"> | ||||
|       <intent-filter android:label="@string/app_name"> | ||||
|         <action android:name="android.intent.action.VIEW" /> | ||||
|         <category android:name="android.intent.category.DEFAULT" /> | ||||
|         <category android:name="android.intent.category.BROWSABLE" /> | ||||
| @@ -218,24 +219,15 @@ The scheme=file is still there for old OS devices. It's also queried by apps lik | ||||
|         <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.kdb" /> | ||||
|       </intent-filter> | ||||
|  | ||||
|       <intent-filter> | ||||
|         <action android:name="android.intent.action.VIEW"/> | ||||
|         <category android:name="android.intent.category.BROWSABLE"/> | ||||
|         <data | ||||
|           android:scheme="https" | ||||
|           android:host="my.yubico.com" | ||||
|           android:pathPrefix="/neo"/> | ||||
|       <intent-filter android:label="@string/kp2a_findUrl"> | ||||
|         <action android:name="android.intent.action.SEND" /> | ||||
|         <category android:name="android.intent.category.DEFAULT" /> | ||||
|         <data android:mimeType="text/plain" /> | ||||
|       </intent-filter> | ||||
|       <intent-filter> | ||||
|         <action android:name="keepass2android.ACTION_START_WITH_TASK" /> | ||||
|         <category android:name="android.intent.category.DEFAULT" /> | ||||
|       </intent-filter> | ||||
| 	   | ||||
| 			<intent-filter android:label="@string/kp2a_findUrl"> | ||||
| 				<action android:name="android.intent.action.SEND" /> | ||||
| 				<category android:name="android.intent.category.DEFAULT" /> | ||||
| 				<data android:mimeType="text/plain" /> | ||||
| 			</intent-filter> | ||||
| 			<intent-filter> | ||||
| 				<action android:name="keepass2android.ACTION_START_WITH_TASK" /> | ||||
| 				<category android:name="android.intent.category.DEFAULT" /> | ||||
| 			</intent-filter> | ||||
|       <intent-filter> | ||||
|         <action android:name="android.intent.action.VIEW" /> | ||||
|         <category android:name="android.intent.category.DEFAULT" /> | ||||
| @@ -244,24 +236,28 @@ The scheme=file is still there for old OS devices. It's also queried by apps lik | ||||
|         <data android:host="totp"/> | ||||
|         <data android:host="hotp"/> | ||||
|       </intent-filter> | ||||
| 		</activity> | ||||
| 		<uses-library android:required="false" android:name="com.sec.android.app.multiwindow" /> | ||||
| 		<meta-data android:name="com.sec.android.support.multiwindow" android:value="true" /> | ||||
| 		<meta-data android:name="com.sec.android.multiwindow.DEFAULT_SIZE_W" android:value="632.0dip" /> | ||||
| 		<meta-data android:name="com.sec.android.multiwindow.DEFAULT_SIZE_H" android:value="598.0dip" /> | ||||
| 		<meta-data android:name="com.sec.android.multiwindow.MINIMUM_SIZE_W" android:value="426.0dip" /> | ||||
| 		<meta-data android:name="com.sec.android.multiwindow.MINIMUM_SIZE_H" android:value="360.0dip" /> | ||||
| 	</application> | ||||
| 	<uses-permission android:name="android.permission.VIBRATE" /> | ||||
| 	<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> | ||||
| 	<uses-permission android:name="android.permission.USE_FINGERPRINT" /> | ||||
|   <uses-permission android:name="android.permission.USE_BIOMETRIC" /> | ||||
|   <uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> | ||||
|    | ||||
|   <uses-feature android:name="android.hardware.camera" android:required="false" /> | ||||
|  | ||||
|     </activity> | ||||
|     <uses-library android:required="false" android:name="com.sec.android.app.multiwindow" /> | ||||
|     <meta-data android:name="com.sec.android.support.multiwindow" android:value="true" /> | ||||
|     <meta-data android:name="com.sec.android.multiwindow.DEFAULT_SIZE_W" android:value="632.0dip" /> | ||||
|     <meta-data android:name="com.sec.android.multiwindow.DEFAULT_SIZE_H" android:value="598.0dip" /> | ||||
|     <meta-data android:name="com.sec.android.multiwindow.MINIMUM_SIZE_W" android:value="426.0dip" /> | ||||
|     <meta-data android:name="com.sec.android.multiwindow.MINIMUM_SIZE_H" android:value="360.0dip" /> | ||||
|   </application> | ||||
|   <uses-permission android:name="android.permission.VIBRATE" /> | ||||
|   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> | ||||
|   <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> | ||||
|   <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> | ||||
|   <uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" /> | ||||
|   <uses-permission android:name="keepass2android.keepass2android_nonet.permission.KP2aInternalFileBrowsing" /> | ||||
|   <uses-permission android:name="keepass2android.keepass2android_nonet.permission.KP2aInternalSearch" /> | ||||
|   <uses-permission android:name="android.permission.USE_FINGERPRINT" /> | ||||
|   <uses-permission android:name="android.permission.USE_BIOMETRIC" /> | ||||
|   <uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> | ||||
|  | ||||
|   <uses-feature android:name="android.hardware.camera" android:required="false" /> | ||||
|  | ||||
|   <!-- Samsung Pass permission --> | ||||
|   <uses-permission android:name="com.samsung.android.providers.context.permission.WRITE_USE_APP_FEATURE_SURVEY" /> | ||||
|   <uses-permission android:name="android.permission.READ_PHONE_STATE" tools:node="remove" /> | ||||
| 	 | ||||
| </manifest> | ||||
|   | ||||
| @@ -1245,7 +1245,7 @@ namespace keepass2android | ||||
| 	    { | ||||
| 	        var db = TryFindDatabaseForElement(element); | ||||
|             if (db == null) | ||||
|                 throw new Exception("Database element not found!"); | ||||
|                 throw new Exception($"Database element {element.Uuid} not found in any of {OpenDatabases.Count()} databases!"); | ||||
| 	        return db; | ||||
| 	    } | ||||
|  | ||||
|   | ||||
| @@ -15,6 +15,7 @@ using Android.Content.Res; | ||||
| using Android.Preferences; | ||||
| using Google.Android.Material.Dialog; | ||||
| using keepass2android; | ||||
| using PluginTOTP; | ||||
|  | ||||
| namespace keepass2android | ||||
| { | ||||
| @@ -638,19 +639,7 @@ namespace keepass2android | ||||
|  | ||||
|             if (CopyTotpToClipboard && isTotpEntry) | ||||
|             { | ||||
|                 Dictionary<string, string> entryFields = pwEntryOutput.OutputStrings.ToDictionary(pair => StrUtil.SafeXmlString(pair.Key), pair => pair.Value.ReadString()); | ||||
|                 var totpData= totpPluginAdapter.GetTotpData(entryFields, activity, true); | ||||
|                 if (totpData.IsTotpEntry) | ||||
|                 { | ||||
|                     TOTPProvider prov = new TOTPProvider(totpData); | ||||
|                     string totp = prov.GenerateByByte(totpData.TotpSecret); | ||||
|                     CopyToClipboardService.CopyValueToClipboardWithTimeout(activity, totp, true); | ||||
|  | ||||
|                     App.Kp2a.ShowMessage(activity, activity.GetString(Resource.String.TotpCopiedToClipboard), | ||||
|                          MessageSeverity.Info); | ||||
|                 } | ||||
|  | ||||
|                  | ||||
|                 DoCopyTotpToClipboard(activity, pwEntryOutput, totpPluginAdapter); | ||||
|             } | ||||
|  | ||||
|             if (CloseAfterCreate) | ||||
| @@ -661,7 +650,23 @@ namespace keepass2android | ||||
|                 activity.CloseAfterTaskComplete();	 | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
|         private static void DoCopyTotpToClipboard(EntryActivity activity, PwEntryOutput pwEntryOutput, | ||||
|             ITotpPluginAdapter? totpPluginAdapter) | ||||
|         { | ||||
|             Dictionary<string, string> entryFields = pwEntryOutput.OutputStrings.ToDictionary(pair => StrUtil.SafeXmlString(pair.Key), pair => pair.Value.ReadString()); | ||||
|             var totpData = totpPluginAdapter.GetTotpData(entryFields, activity, true); | ||||
|             if (totpData.IsTotpEntry) | ||||
|             { | ||||
|                 TOTPProvider prov = new TOTPProvider(totpData); | ||||
|                 string totp = prov.GenerateByByte(totpData.TotpSecret); | ||||
|                 CopyToClipboardService.CopyValueToClipboardWithTimeout(activity, totp, true); | ||||
|  | ||||
|                 App.Kp2a.ShowMessage(activity, activity.GetString(Resource.String.TotpCopiedToClipboard), | ||||
|                     MessageSeverity.Info); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|  | ||||
| 	/// <summary> | ||||
|   | ||||
| @@ -10,6 +10,7 @@ | ||||
|     <ApplicationVersion>1</ApplicationVersion> | ||||
|     <ApplicationDisplayVersion>1.0</ApplicationDisplayVersion> | ||||
|     <AllowUnsafeBlocks>true</AllowUnsafeBlocks> | ||||
|     <DefineConstants Condition="'$(Flavor)'=='NoNet'">NO_QR_SCANNER;EXCLUDE_JAVAFILESTORAGE;NoNet</DefineConstants> | ||||
|   </PropertyGroup> | ||||
|   <ItemGroup> | ||||
|     <None Remove="Assets\fontawesome-webfont.ttf" /> | ||||
| @@ -750,18 +751,18 @@ | ||||
|     <PackageReference Include="Xamarin.AndroidX.Preference" Version="1.2.1.12" /> | ||||
|     <PackageReference Include="Xamarin.Google.Android.Material" Version="1.12.0.2" /> | ||||
|     <PackageReference Include="Xamarin.Google.Guava" Version="33.4.0.1" /> | ||||
|     <PackageReference Include="Xamarin.GooglePlayServices.Auth" Version="121.3.0.1" /> | ||||
|     <PackageReference Include="Xamarin.GooglePlayServices.Base" Version="118.5.0.4" /> | ||||
|     <PackageReference Include="Xamarin.GooglePlayServices.Code.Scanner" Version="116.1.0.10" /> | ||||
|     <PackageReference Include="Xamarin.GooglePlayServices.Auth" Version="121.3.0.1" Condition="'$(Flavor)'!='NoNet'" /> | ||||
|     <PackageReference Include="Xamarin.GooglePlayServices.Base" Version="118.5.0.4" Condition="'$(Flavor)'!='NoNet'" /> | ||||
|     <PackageReference Include="Xamarin.GooglePlayServices.Code.Scanner" Version="116.1.0.10" Condition="'$(Flavor)'!='NoNet'" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ProjectReference Include="..\AndroidFileChooserBinding\AndroidFileChooserBinding.csproj" /> | ||||
|     <ProjectReference Include="..\DropboxBinding\DropboxBinding.csproj" /> | ||||
|     <ProjectReference Include="..\JavaFileStorageBindings\JavaFileStorageBindings.csproj" /> | ||||
|     <ProjectReference Include="..\DropboxBinding\DropboxBinding.csproj" Condition="'$(Flavor)'!='NoNet'" /> | ||||
|     <ProjectReference Include="..\JavaFileStorageBindings\JavaFileStorageBindings.csproj" Condition="'$(Flavor)'!='NoNet'" /> | ||||
|     <ProjectReference Include="..\Kp2aAutofillParser\Kp2aAutofillParser.csproj" /> | ||||
|     <ProjectReference Include="..\KP2AKdbLibraryBinding\KP2AKdbLibraryBinding.csproj" /> | ||||
|     <ProjectReference Include="..\Kp2aKeyboardBinding\Kp2aKeyboardBinding.csproj" /> | ||||
|     <ProjectReference Include="..\PCloudBindings\PCloudBindings.csproj" /> | ||||
|     <ProjectReference Include="..\PCloudBindings\PCloudBindings.csproj" Condition="'$(Flavor)'!='NoNet'" /> | ||||
|     <ProjectReference Include="..\PluginSdkBinding\PluginSdkBinding.csproj" /> | ||||
|     <ProjectReference Include="..\ZlibAndroid\ZlibAndroid.csproj" /> | ||||
|     <ProjectReference Include="..\TwofishCipher\TwofishCipher.csproj" /> | ||||
|   | ||||
| @@ -28,13 +28,11 @@ namespace keepass2android.services.AutofillBase | ||||
| { | ||||
|     public interface IAutofillIntentBuilder | ||||
|     { | ||||
|         PendingIntent GetAuthPendingIntentForResponse(Context context, string query, string queryDomain, string queryPackage, | ||||
|             bool isManualRequest, bool autoReturnFromQuery, AutofillServiceBase.DisplayWarning warning); | ||||
|         PendingIntent GetAuthPendingIntentForResponse(Context context, string query, string queryDomain, string queryPackage, bool autoReturnFromQuery, AutofillServiceBase.DisplayWarning warning); | ||||
|  | ||||
|         PendingIntent GetAuthPendingIntentForWarning(Context context, PwUuid entryUuid, AutofillServiceBase.DisplayWarning warning); | ||||
|  | ||||
|         PendingIntent GetDisablePendingIntentForResponse(Context context, string query,  | ||||
|             bool isManualRequest, bool isDisable); | ||||
|         PendingIntent GetDisablePendingIntentForResponse(Context context, string query, bool isDisable); | ||||
|         Intent GetRestartAppIntent(Context context); | ||||
|  | ||||
|         int AppIconResource { get; } | ||||
| @@ -150,7 +148,7 @@ namespace keepass2android.services.AutofillBase | ||||
|                 var parser = new StructureParser(this, structure); | ||||
|                 try | ||||
|                 { | ||||
|                     query = parser.ParseForFill(isManual); | ||||
|                     query = parser.ParseForFill(); | ||||
|  | ||||
|                 } | ||||
|                 catch (Java.Lang.SecurityException e) | ||||
| @@ -213,16 +211,14 @@ namespace keepass2android.services.AutofillBase | ||||
|                     { | ||||
|                         if (query.WebDomain != null) | ||||
|                             AddQueryDataset(query.WebDomain, | ||||
|                                 query.WebDomain, query.PackageName, | ||||
|                                 isManual, autofillIds, responseBuilder, !hasEntryDataset, | ||||
|                                 query.WebDomain, query.PackageName, autofillIds, responseBuilder, !hasEntryDataset, | ||||
|                                 query.IncompatiblePackageAndDomain | ||||
|                                     ? DisplayWarning.FillDomainInUntrustedApp | ||||
|                                     : DisplayWarning.None, | ||||
|                                 AutofillHelper.ExtractSpec(inlinePresentationSpecs, entryDatasets.Count)); | ||||
|                         else | ||||
|                             AddQueryDataset(query.PackageNameWithPseudoSchema, | ||||
|                                 query.WebDomain, query.PackageName, | ||||
|                                 isManual, autofillIds, responseBuilder, !hasEntryDataset, DisplayWarning.None, | ||||
|                                 query.WebDomain, query.PackageName, autofillIds, responseBuilder, !hasEntryDataset, DisplayWarning.None, | ||||
|                                 AutofillHelper.ExtractSpec(inlinePresentationSpecs, entryDatasets.Count)); | ||||
|                     } | ||||
|  | ||||
| @@ -340,9 +336,9 @@ namespace keepass2android.services.AutofillBase | ||||
|              | ||||
|         } | ||||
|  | ||||
|         private void AddQueryDataset(string query, string queryDomain, string queryPackage, bool isManual, AutofillId[] autofillIds, FillResponse.Builder responseBuilder, bool autoReturnFromQuery, DisplayWarning warning, InlinePresentationSpec inlinePresentationSpec) | ||||
|         private void AddQueryDataset(string query, string queryDomain, string queryPackage, AutofillId[] autofillIds, FillResponse.Builder responseBuilder, bool autoReturnFromQuery, DisplayWarning warning, InlinePresentationSpec inlinePresentationSpec) | ||||
|         { | ||||
|             PendingIntent pendingIntent = IntentBuilder.GetAuthPendingIntentForResponse(this, query, queryDomain, queryPackage, isManual, autoReturnFromQuery, warning); | ||||
|             PendingIntent pendingIntent = IntentBuilder.GetAuthPendingIntentForResponse(this, query, queryDomain, queryPackage, autoReturnFromQuery, warning); | ||||
|             string text = GetString(Resource.String.autofill_sign_in_prompt); | ||||
|             RemoteViews overlayPresentation = AutofillHelper.NewRemoteViews(base.PackageName, | ||||
|                 text, AppNames.LauncherIcon); | ||||
| @@ -396,7 +392,7 @@ namespace keepass2android.services.AutofillBase | ||||
|             if (isQueryDisabled && !isManual) | ||||
|                 return; | ||||
|             bool isForDisable = !isQueryDisabled; | ||||
|             var pendingIntent = IntentBuilder.GetDisablePendingIntentForResponse(this, query, isManual, isForDisable); | ||||
|             var pendingIntent = IntentBuilder.GetDisablePendingIntentForResponse(this, query, isForDisable); | ||||
|  | ||||
|             string text = GetString(isForDisable ? Resource.String.autofill_disable : Resource.String.autofill_enable_for, new Java.Lang.Object[] { GetDisplayNameForQuery(query, this) }); | ||||
|             RemoteViews presentation = AutofillHelper.NewRemoteViews(base.PackageName, | ||||
|   | ||||
| @@ -27,7 +27,6 @@ namespace keepass2android.services.AutofillBase | ||||
|         public static string ExtraQueryPackageString => "EXTRA_QUERY_PACKAGE_STRING"; | ||||
|         public static string ExtraQueryDomainString => "EXTRA_QUERY_DOMAIN_STRING"; | ||||
|         public static string ExtraUseLastOpenedEntry => "EXTRA_USE_LAST_OPENED_ENTRY"; //if set to true, no query UI is displayed. Can be used to just show a warning | ||||
|         public static string ExtraIsManualRequest => "EXTRA_IS_MANUAL_REQUEST"; | ||||
|         public static string ExtraAutoReturnFromQuery => "EXTRA_AUTO_RETURN_FROM_QUERY"; | ||||
|         public static string ExtraDisplayWarning => "EXTRA_DISPLAY_WARNING"; | ||||
|  | ||||
| @@ -185,18 +184,18 @@ namespace keepass2android.services.AutofillBase | ||||
|             ReplyIntent = null; | ||||
|         } | ||||
|  | ||||
|         protected void OnSuccess(FilledAutofillFieldCollection<ViewNodeInputField> clientFormDataMap, bool isManual) | ||||
|         protected void OnSuccess(FilledAutofillFieldCollection<ViewNodeInputField> clientFormDataMap) | ||||
|         { | ||||
|             var intent = Intent; | ||||
|             AssistStructure structure = (AssistStructure)intent.GetParcelableExtra(AutofillManager.ExtraAssistStructure); | ||||
|             if (structure == null) | ||||
|             if (structure == null || clientFormDataMap == null) | ||||
|             { | ||||
|                 SetResult(Result.Canceled); | ||||
|                 Finish(); | ||||
|                 return; | ||||
|             } | ||||
|             StructureParser parser = new StructureParser(this, structure); | ||||
|             parser.ParseForFill(isManual); | ||||
|             parser.ParseForFill(); | ||||
|             AutofillFieldMetadataCollection autofillFields = parser.AutofillFields; | ||||
|             var partitionData = AutofillHintsHelper.FilterForPartition(clientFormDataMap, parser.AutofillFields.FocusedAutofillCanonicalHints); | ||||
|              | ||||
| @@ -229,7 +228,7 @@ namespace keepass2android.services.AutofillBase | ||||
|  | ||||
|         private void ReturnSuccess() | ||||
|         { | ||||
|             OnSuccess(GetDataset(), Intent.GetBooleanExtra(ExtraIsManualRequest, false)); | ||||
|             OnSuccess(GetDataset()); | ||||
|             Finish(); | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -72,7 +72,7 @@ namespace keepass2android.services.AutofillBase | ||||
|             domainSuffixParserCache = new PublicSuffixRuleCache(context); | ||||
|         } | ||||
|  | ||||
|         public AutofillView<ViewNodeInputField> GetAutofillView(bool isManualRequest) | ||||
|         public AutofillView<ViewNodeInputField> GetAutofillView() | ||||
|         { | ||||
|             AutofillView<ViewNodeInputField> autofillView = new AutofillView<ViewNodeInputField>(); | ||||
|              | ||||
| @@ -83,7 +83,7 @@ namespace keepass2android.services.AutofillBase | ||||
|                 var node = _structure.GetWindowNodeAt(i); | ||||
|  | ||||
|                 var view = node.RootViewNode; | ||||
|                 ParseRecursive(autofillView, view, isManualRequest); | ||||
|                 ParseRecursive(autofillView, view); | ||||
|             } | ||||
|  | ||||
|             autofillView.PackageId = autofillView.PackageId ?? _structure.ActivityComponent.PackageName; | ||||
| @@ -93,7 +93,7 @@ namespace keepass2android.services.AutofillBase | ||||
|         } | ||||
|  | ||||
|  | ||||
|         void ParseRecursive(AutofillView<ViewNodeInputField> autofillView, AssistStructure.ViewNode viewNode, bool isManualRequest) | ||||
|         void ParseRecursive(AutofillView<ViewNodeInputField> autofillView, AssistStructure.ViewNode viewNode) | ||||
|         { | ||||
|             String webDomain = viewNode.WebDomain; | ||||
|             if ((autofillView.PackageId == null) && (!string.IsNullOrWhiteSpace(viewNode.IdPackage)) && | ||||
| @@ -129,7 +129,7 @@ namespace keepass2android.services.AutofillBase | ||||
|             { | ||||
|                 for (int i = 0; i < childrenSize; i++) | ||||
|                 { | ||||
|                     ParseRecursive(autofillView, viewNode.GetChildAt(i), isManualRequest); | ||||
|                     ParseRecursive(autofillView, viewNode.GetChildAt(i)); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| @@ -159,11 +159,11 @@ namespace keepass2android.services.AutofillBase | ||||
|  | ||||
|         } | ||||
|  | ||||
|         protected override AutofillTargetId Parse(bool forFill, bool isManualRequest, AutofillView<ViewNodeInputField> autofillView) | ||||
|         protected override AutofillTargetId Parse(bool forFill, AutofillView<ViewNodeInputField> autofillView) | ||||
|         { | ||||
|             if (autofillView == null) | ||||
|                 Kp2aLog.Log("Received null autofill view!"); | ||||
|             var result = base.Parse(forFill, isManualRequest, autofillView); | ||||
|             var result = base.Parse(forFill, autofillView); | ||||
|  | ||||
|             Kp2aLog.Log("Parsing done"); | ||||
|  | ||||
| @@ -185,14 +185,14 @@ namespace keepass2android.services.AutofillBase | ||||
|  | ||||
|         public AutofillTargetId ParseForSave() | ||||
|         { | ||||
|             var autofillView = new AutofillViewFromAssistStructureFinder(_context, _structure).GetAutofillView(true); | ||||
|             return Parse(false, true, autofillView); | ||||
|             var autofillView = new AutofillViewFromAssistStructureFinder(_context, _structure).GetAutofillView(); | ||||
|             return Parse(false, autofillView); | ||||
|         } | ||||
|  | ||||
|         public StructureParserBase<ViewNodeInputField>.AutofillTargetId ParseForFill(bool isManual) | ||||
|         public StructureParserBase<ViewNodeInputField>.AutofillTargetId ParseForFill() | ||||
|         { | ||||
|             var autofillView = new AutofillViewFromAssistStructureFinder(_context, _structure).GetAutofillView(isManual); | ||||
|             return Parse(true, isManual, autofillView); | ||||
|             var autofillView = new AutofillViewFromAssistStructureFinder(_context, _structure).GetAutofillView(); | ||||
|             return Parse(true, autofillView); | ||||
|         } | ||||
|          | ||||
|  | ||||
|   | ||||
| @@ -17,14 +17,12 @@ namespace keepass2android.services | ||||
|     { | ||||
|         private static int _pendingIntentRequestCode = 0; | ||||
|  | ||||
|         public PendingIntent GetAuthPendingIntentForResponse(Context context, string query, string queryDomain, string queryPackage, | ||||
|             bool isManualRequest, bool autoReturnFromQuery, AutofillServiceBase.DisplayWarning warning) | ||||
|         public PendingIntent GetAuthPendingIntentForResponse(Context context, string query, string queryDomain, string queryPackage, bool autoReturnFromQuery, AutofillServiceBase.DisplayWarning warning) | ||||
|         { | ||||
|             Intent intent = new Intent(context, typeof(ChooseForAutofillActivity)); | ||||
|             intent.PutExtra(ChooseForAutofillActivityBase.ExtraQueryString, query); | ||||
|             intent.PutExtra(ChooseForAutofillActivityBase.ExtraQueryDomainString, queryDomain); | ||||
|             intent.PutExtra(ChooseForAutofillActivityBase.ExtraQueryPackageString, queryPackage); | ||||
|             intent.PutExtra(ChooseForAutofillActivityBase.ExtraIsManualRequest, isManualRequest); | ||||
|             intent.PutExtra(ChooseForAutofillActivityBase.ExtraAutoReturnFromQuery, autoReturnFromQuery); | ||||
|             intent.PutExtra(ChooseForAutofillActivityBase.ExtraDisplayWarning, (int)warning); | ||||
|             return PendingIntent.GetActivity(context, _pendingIntentRequestCode++, intent, Util.AddMutabilityFlag(PendingIntentFlags.CancelCurrent, PendingIntentFlags.Mutable)); | ||||
| @@ -40,12 +38,10 @@ namespace keepass2android.services | ||||
|             return PendingIntent.GetActivity(context, _pendingIntentRequestCode++, intent, Util.AddMutabilityFlag(PendingIntentFlags.CancelCurrent, PendingIntentFlags.Mutable)); | ||||
|         } | ||||
|  | ||||
|         public PendingIntent GetDisablePendingIntentForResponse(Context context, string query, | ||||
|             bool isManualRequest, bool isDisable) | ||||
|         public PendingIntent GetDisablePendingIntentForResponse(Context context, string query, bool isDisable) | ||||
|         { | ||||
|             Intent intent = new Intent(context, typeof(DisableAutofillForQueryActivity)); | ||||
|             intent.PutExtra(ChooseForAutofillActivityBase.ExtraQueryString, query); | ||||
|             intent.PutExtra(ChooseForAutofillActivityBase.ExtraIsManualRequest, isManualRequest); | ||||
|             intent.PutExtra(DisableAutofillForQueryActivity.ExtraIsDisable, isDisable); | ||||
|  | ||||
|             return PendingIntent.GetActivity(context, _pendingIntentRequestCode++, intent, Util.AddMutabilityFlag(PendingIntentFlags.CancelCurrent, PendingIntentFlags.Immutable)); | ||||
|   | ||||
| @@ -9,7 +9,7 @@ using KeePassLib.Serialization; | ||||
|  | ||||
| namespace keepass2android | ||||
| { | ||||
|     [Activity] | ||||
|     [Activity(Theme = "@style/Kp2aTheme_ActionBar")] | ||||
|     public class ExportKeyfileActivity : LockCloseActivity | ||||
|     { | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user