diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bafa83efb..22e72cf72 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,16 +10,15 @@ jobs: # runs-on: macos-12 # steps: - # - uses: actions/checkout@v3 - - # - name: Fetch submodules - # run: git submodule init && git submodule update + # - uses: actions/checkout@v4 + # with: + # submodules: true # - name: Setup Gradle - # uses: gradle/gradle-build-action@v2 + # uses: gradle/actions/setup-gradle@v3 # - name: Cache NuGet packages - # uses: actions/cache@v3 + # uses: actions/cache@v4 # with: # path: ~/.nuget/packages # key: ${{ runner.os }}-nuget-${{ hashFiles('src/**/*.csproj', 'src/**/packages.config') }} @@ -52,7 +51,7 @@ jobs: # # $VM_ASSETS/select-xamarin-sdk-v2.sh --mono=6.12 --android=11.2 # - name: Switch to JDK-11 - # uses: actions/setup-java@v3 + # uses: actions/setup-java@v4 # with: # java-version: '11' # distribution: 'temurin' @@ -82,7 +81,7 @@ jobs: # make apk Flavor=Net # - name: Archive production artifacts (net) - # uses: actions/upload-artifact@v3 + # uses: actions/upload-artifact@v4 # with: # name: signed APK ('net' built on ${{ github.job }}) # path: | @@ -100,7 +99,7 @@ jobs: # make apk Flavor=NoNet # - name: Archive production artifacts (nonet) - # uses: actions/upload-artifact@v3 + # uses: actions/upload-artifact@v4 # with: # name: signed APK ('nonet' built on ${{ github.job }}) # path: | @@ -130,16 +129,15 @@ jobs: # # Build Artifact of xamarin.android-oss dated 2022-02-16, master branch (= version 12.2.99) # xamarin_url: https://artprodcus3.artifacts.visualstudio.com/Ad0adf05a-e7d7-4b65-96fe-3f3884d42038/6fd3d886-57a5-4e31-8db7-52a1b47c07a8/_apis/artifact/cGlwZWxpbmVhcnRpZmFjdDovL3hhbWFyaW4vcHJvamVjdElkLzZmZDNkODg2LTU3YTUtNGUzMS04ZGI3LTUyYTFiNDdjMDdhOC9idWlsZElkLzU0OTUzL2FydGlmYWN0TmFtZS9pbnN0YWxsZXJzLXVuc2lnbmVkKy0rTGludXg1/content?format=zip # steps: - # - uses: actions/checkout@v3 - - # - name: Fetch submodules - # run: git submodule init && git submodule update + # - uses: actions/checkout@v4 + # with: + # submodules: true # - name: Setup Gradle - # uses: gradle/gradle-build-action@v2 + # uses: gradle/actions/setup-gradle@v3 # - name: Cache NuGet packages - # uses: actions/cache@v3 + # uses: actions/cache@v4 # with: # path: ~/.nuget/packages # key: ${{ runner.os }}-nuget-${{ hashFiles('src/**/*.csproj', 'src/**/packages.config') }} @@ -148,7 +146,7 @@ jobs: # - name: Cache Xamarin.Android packages # id: xamarin_cache - # uses: actions/cache@v3 + # uses: actions/cache@v4 # with: # path: ~/xamarin.android-oss # key: ${{ runner.os }}-xamarin.android-oss-${{ env.xamarin_url }} @@ -183,7 +181,7 @@ jobs: # echo "$HOME/xamarin.android-oss/bin/Release/bin" >> $GITHUB_PATH # - name: Switch to JDK-11 - # uses: actions/setup-java@v3 + # uses: actions/setup-java@v4 # with: # java-version: '11' # distribution: 'temurin' @@ -217,7 +215,7 @@ jobs: # make apk Flavor=Net # - name: Archive production artifacts (net) - # uses: actions/upload-artifact@v3 + # uses: actions/upload-artifact@v4 # with: # name: signed APK ('net' built on ${{ github.job }}) # path: | @@ -235,7 +233,7 @@ jobs: # make apk Flavor=NoNet # - name: Archive production artifacts (nonet) - # uses: actions/upload-artifact@v3 + # uses: actions/upload-artifact@v4 # with: # name: signed APK ('nonet' built on ${{ github.job }}) # path: | @@ -254,39 +252,38 @@ jobs: runs-on: windows-2022 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 + with: + submodules: true - name: Setup Gradle - uses: gradle/gradle-build-action@v2 + uses: gradle/actions/setup-gradle@v3 - name: Cache NuGet packages - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.nuget/packages key: ${{ runner.os }}-nuget-${{ hashFiles('src/**/*.csproj', 'src/**/packages.config') }} restore-keys: | ${{ runner.os }}-nuget- - - name: Fetch submodules - run: git submodule init && git submodule update - # Workaround an issue when building on windows-2022. Error was # D8 : OpenJDK 64-Bit Server VM warning : INFO: os::commit_memory(0x00000000ae400000, 330301440, 0) failed; error='The paging file is too small for this operation to complete' (DOS error/errno=1455) [D:\a\keepass2android\keepass2android\src\keepass2android\keepass2android-app.csproj] # C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Xamarin\Android\Xamarin.Android.D8.targets(81,5): error MSB6006: "java.exe" exited with code 1. [D:\a\keepass2android\keepass2android\src\keepass2android\keepass2android-app.csproj] - name: Configure Pagefile - uses: al-cheb/configure-pagefile-action@v1.3 + uses: al-cheb/configure-pagefile-action@a3b6ebd6b634da88790d9c58d4b37a7f4a7b8708 # v1.4 with: minimum-size: 8GB - name: Add msbuild to PATH - uses: microsoft/setup-msbuild@v1.1 + uses: microsoft/setup-msbuild@v2 # If we want to also have nmake, use this instead #uses: ilammy/msvc-dev-cmd@v1 - - name: Switch to JDK-11 - uses: actions/setup-java@v3 + - name: Switch to JDK-17 + uses: actions/setup-java@v4 with: - java-version: '11' + java-version: '17' distribution: 'temurin' - name: Display java version @@ -320,7 +317,7 @@ jobs: make apk Flavor=Net - name: Archive production artifacts (net) - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: signed APK ('net' built on ${{ github.job }}) path: | @@ -333,7 +330,7 @@ jobs: run: | make msbuild Flavor=NoNet - name: Test Autofill - working-directory: ./src/Kp2aAutofillParserTest + working-directory: ./src/Kp2aAutofillParser.Tests run: dotnet test - name: Build APK (nonet) @@ -341,7 +338,7 @@ jobs: make apk Flavor=NoNet - name: Archive production artifacts (nonet) - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: signed APK ('nonet' built on ${{ github.job }}) path: | diff --git a/.gitignore b/.gitignore index 57fd4e7e8..47b554269 100644 --- a/.gitignore +++ b/.gitignore @@ -176,3 +176,5 @@ src/java/Keepass2AndroidPluginSDK2/build/generated/mockable-Google-Inc.-Google-A /src/ActionViewFilterTest /docs/gdrive-verification /src/MegaTest +*.dtbcache.json +/src/keepass2android-app/AndroidManifest.xml diff --git a/Makefile b/Makefile index eab241638..cd6a01b21 100644 --- a/Makefile +++ b/Makefile @@ -120,14 +120,38 @@ ifneq ($(Configuration),) else $(warning Configuration environment variable not set.) endif + +DELETE_MANIFEST_LINK := +CREATE_MANIFEST_LINK := + +MANIFEST_FILE := ifneq ($(Flavor),) MSBUILD_PARAM += -p:Flavor="$(Flavor)" + ifneq ($(Flavor),) + ifeq ($(Flavor),Debug) + MANIFEST_FILE := AndroidManifest_debug.xml + endif + ifeq ($(Flavor),Net) + MANIFEST_FILE := AndroidManifest_net.xml + endif + ifeq ($(Flavor),NoNet) + MANIFEST_FILE := AndroidManifest_nonet.xml + endif + ifeq ($(detected_OS),Windows) + DELETE_MANIFEST_LINK := @cmd /c del src\keepass2android-app\AndroidManifest.xml + CREATE_MANIFEST_LINK := @cmd /c mklink /h src\keepass2android-app\AndroidManifest.xml src\keepass2android-app\Manifests\$(MANIFEST_FILE) + else + DELETE_MANIFEST_LINK := rm -f src/keepass2android-app/AndroidManifest.xml + CREATE_MANIFEST_LINK := ln -f src/keepass2android-app/Manifests/$(MANIFEST_FILE) src/keepass2android-app/AndroidManifest.xml + endif + + endif else $(warning Flavor environment variable not set.) endif ifneq ($(KeyStore),) - MSBUILD_PARAM += -p:AndroidKeyStore=True -p:AndroidSigningKeyStore="$(KeyStore)" -p:AndroidSigningStorePass=env:MyAndroidSigningStorePass -p:AndroidSigningKeyPass=env:MyAndroidSigningKeyPass + MSBUILD_PARAM += -p:AndroidKeyStore=True -p:AndroidSigningKeyStore="$(KeyStore)" -p:AndroidSigningStorePass=env:MyAndroidSigningStorePass -p:AndroidSigningKeyPass=env:MyAndroidSigningKeyPass -p:AndroidSigningKeyAlias="kp2a" endif ifeq ($(detected_OS),Windows) @@ -281,6 +305,11 @@ endif $(MSBUILD) src/KeePass.sln -t:restore $(MSBUILD_PARAM) -p:RestorePackagesConfig=true @echo "" > stamp.nuget_$(Flavor) +manifestlink: + $(info Creating hardlink for manifest of Flavor: $(Flavor)) + $(DELETE_MANIFEST_LINK) + $(CREATE_MANIFEST_LINK) + ##### src/Kp2aBusinessLogic/Io/DropboxFileStorageKeys.cs: ifeq ($(detected_OS),Windows) @@ -289,11 +318,11 @@ else $(CP) src/Kp2aBusinessLogic/Io/DropboxFileStorageKeysDummy.cs $@ endif -msbuild: native java nuget src/Kp2aBusinessLogic/Io/DropboxFileStorageKeys.cs +msbuild: manifestlink native java nuget src/Kp2aBusinessLogic/Io/DropboxFileStorageKeys.cs $(MSBUILD) src/KeePass.sln -target:keepass2android-app -p:AndroidSdkDirectory="$(ANDROID_SDK_ROOT)" -p:BuildProjectReferences=true $(MSBUILD_PARAM) -p:Platform="Any CPU" -m -apk: msbuild - $(MSBUILD) src/keepass2android/keepass2android-app.csproj -p:AndroidSdkDirectory="$(ANDROID_SDK_ROOT)" -t:SignAndroidPackage $(MSBUILD_PARAM) -p:Platform=AnyCPU -m +apk: msbuild + $(MSBUILD) src/keepass2android-app/keepass2android-app.csproj -p:AndroidSdkDirectory="$(ANDROID_SDK_ROOT)" -t:SignAndroidPackage $(MSBUILD_PARAM) -p:Platform=AnyCPU -m build_all: msbuild diff --git a/graphics/add_key.svg b/graphics/add_key.svg new file mode 100644 index 000000000..4a78d4925 --- /dev/null +++ b/graphics/add_key.svg @@ -0,0 +1,39 @@ + + diff --git a/graphics/donate_beer.svg b/graphics/donate_beer.svg new file mode 100644 index 000000000..129bfccde --- /dev/null +++ b/graphics/donate_beer.svg @@ -0,0 +1,41 @@ + + diff --git a/graphics/donate_beer1.svg b/graphics/donate_beer1.svg new file mode 100644 index 000000000..c2cdb9da2 --- /dev/null +++ b/graphics/donate_beer1.svg @@ -0,0 +1,40 @@ + + diff --git a/src/AndroidFileChooserBinding/Additions/AboutAdditions.txt b/src/AndroidFileChooserBinding/Additions/AboutAdditions.txt deleted file mode 100644 index 08caee33b..000000000 --- a/src/AndroidFileChooserBinding/Additions/AboutAdditions.txt +++ /dev/null @@ -1,48 +0,0 @@ -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; } -} \ No newline at end of file diff --git a/src/AndroidFileChooserBinding/AndroidFileChooserBinding.csproj b/src/AndroidFileChooserBinding/AndroidFileChooserBinding.csproj index 6c4f56fcb..c71471775 100644 --- a/src/AndroidFileChooserBinding/AndroidFileChooserBinding.csproj +++ b/src/AndroidFileChooserBinding/AndroidFileChooserBinding.csproj @@ -1,83 +1,16 @@ - - + - Debug - AnyCPU - {3C0F7FE5-639F-4422-A087-8B26CF862D1B} - {10368E6C-D01B-4462-8E8B-01FC667A7035};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - Properties - AndroidFileChooserBinding - AndroidFileChooserBinding - 512 - v8.0 - false - XAJavaInterop1 - class-parse + net8.0-android + 21 + enable + enable - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - None - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - bin\ReleaseNoNet\ - TRACE - true - pdbonly - AnyCPU - prompt - MinimumRecommendedRules.ruleset - false - 4 - - - - - - - - - - - - Jars\android-filechooser-release.aar - - - - - - - - + + + - - - - 20.0.0.4 - False - + - + \ No newline at end of file diff --git a/src/AndroidFileChooserBinding/Jars/AboutJars.txt b/src/AndroidFileChooserBinding/Jars/AboutJars.txt deleted file mode 100644 index c359b62f4..000000000 --- a/src/AndroidFileChooserBinding/Jars/AboutJars.txt +++ /dev/null @@ -1,24 +0,0 @@ -This directory is for Android .jars. - -There are 2 types of jars that are supported: - -== Input Jar == - -This is the jar that bindings should be generated for. - -For example, if you were binding the Google Maps library, this would -be Google's "maps.jar". - -Set the build action for these jars in the properties page to "InputJar". - - -== Reference Jars == - -These are jars that are referenced by the input jar. C# bindings will -not be created for these jars. These jars will be used to resolve -types used by the input jar. - -NOTE: Do not add "android.jar" as a reference jar. It will be added automatically -based on the Target Framework selected. - -Set the build action for these jars in the properties page to "ReferenceJar". \ No newline at end of file diff --git a/src/AndroidFileChooserBinding/Jars/android-support-v4.jar b/src/AndroidFileChooserBinding/Jars/android-support-v4.jar deleted file mode 100644 index 187bdf48b..000000000 Binary files a/src/AndroidFileChooserBinding/Jars/android-support-v4.jar and /dev/null differ diff --git a/src/AndroidFileChooserBinding/Properties/AssemblyInfo.cs b/src/AndroidFileChooserBinding/Properties/AssemblyInfo.cs deleted file mode 100644 index b469b65de..000000000 --- a/src/AndroidFileChooserBinding/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using Android.App; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("AndroidFileChooserBinding")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("AndroidFileChooserBinding")] -[assembly: AssemblyCopyright("Copyright © 2013")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] -[assembly: ComVisible(false)] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/AndroidFileChooserBinding/Transforms/EnumFields.xml b/src/AndroidFileChooserBinding/Transforms/EnumFields.xml index 22959957e..4dddf452c 100644 --- a/src/AndroidFileChooserBinding/Transforms/EnumFields.xml +++ b/src/AndroidFileChooserBinding/Transforms/EnumFields.xml @@ -1,14 +1,3 @@  - + \ No newline at end of file diff --git a/src/AndroidFileChooserBinding/Transforms/EnumMethods.xml b/src/AndroidFileChooserBinding/Transforms/EnumMethods.xml index 49216c618..85202262a 100644 --- a/src/AndroidFileChooserBinding/Transforms/EnumMethods.xml +++ b/src/AndroidFileChooserBinding/Transforms/EnumMethods.xml @@ -1,13 +1,3 @@  - + \ No newline at end of file diff --git a/src/AndroidFileChooserBinding/Transforms/Metadata.xml b/src/AndroidFileChooserBinding/Transforms/Metadata.xml index ea974e92d..e40a4bebc 100644 --- a/src/AndroidFileChooserBinding/Transforms/Metadata.xml +++ b/src/AndroidFileChooserBinding/Transforms/Metadata.xml @@ -4,19 +4,4 @@ - diff --git a/src/AndroidFileChooserBinding/packages.config b/src/AndroidFileChooserBinding/packages.config deleted file mode 100644 index 1508affa7..000000000 --- a/src/AndroidFileChooserBinding/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/AppCompatV7Binding/Additions/AboutAdditions.txt b/src/AppCompatV7Binding/Additions/AboutAdditions.txt deleted file mode 100644 index 08caee33b..000000000 --- a/src/AppCompatV7Binding/Additions/AboutAdditions.txt +++ /dev/null @@ -1,48 +0,0 @@ -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; } -} \ No newline at end of file diff --git a/src/AppCompatV7Binding/AppCompatV7Binding.csproj b/src/AppCompatV7Binding/AppCompatV7Binding.csproj deleted file mode 100644 index cea4c5ce8..000000000 --- a/src/AppCompatV7Binding/AppCompatV7Binding.csproj +++ /dev/null @@ -1,69 +0,0 @@ - - - - Debug - AnyCPU - 8.0.30703 - 2.0 - {23233A28-D74F-4BF8-B4D8-834060840BD7} - {10368E6C-D01B-4462-8E8B-01FC667A7035};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - Properties - AppCompatV7Binding - AppCompatV7Binding - 512 - v2.2 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - bin\ReleaseNoNet\ - TRACE - true - pdbonly - AnyCPU - prompt - MinimumRecommendedRules.ruleset - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/AppCompatV7Binding/Jars/AboutJars.txt b/src/AppCompatV7Binding/Jars/AboutJars.txt deleted file mode 100644 index c359b62f4..000000000 --- a/src/AppCompatV7Binding/Jars/AboutJars.txt +++ /dev/null @@ -1,24 +0,0 @@ -This directory is for Android .jars. - -There are 2 types of jars that are supported: - -== Input Jar == - -This is the jar that bindings should be generated for. - -For example, if you were binding the Google Maps library, this would -be Google's "maps.jar". - -Set the build action for these jars in the properties page to "InputJar". - - -== Reference Jars == - -These are jars that are referenced by the input jar. C# bindings will -not be created for these jars. These jars will be used to resolve -types used by the input jar. - -NOTE: Do not add "android.jar" as a reference jar. It will be added automatically -based on the Target Framework selected. - -Set the build action for these jars in the properties page to "ReferenceJar". \ No newline at end of file diff --git a/src/AppCompatV7Binding/Properties/AssemblyInfo.cs b/src/AppCompatV7Binding/Properties/AssemblyInfo.cs deleted file mode 100644 index 1795c801a..000000000 --- a/src/AppCompatV7Binding/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using Android.App; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("AppCompatV7Binding")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("AppCompatV7Binding")] -[assembly: AssemblyCopyright("Copyright © 2013")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] -[assembly: ComVisible(false)] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/AppCompatV7Binding/Transforms/EnumFields.xml b/src/AppCompatV7Binding/Transforms/EnumFields.xml deleted file mode 100644 index 22959957e..000000000 --- a/src/AppCompatV7Binding/Transforms/EnumFields.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - \ No newline at end of file diff --git a/src/AppCompatV7Binding/Transforms/EnumMethods.xml b/src/AppCompatV7Binding/Transforms/EnumMethods.xml deleted file mode 100644 index 49216c618..000000000 --- a/src/AppCompatV7Binding/Transforms/EnumMethods.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - \ No newline at end of file diff --git a/src/AppCompatV7Binding/Transforms/Metadata.xml b/src/AppCompatV7Binding/Transforms/Metadata.xml deleted file mode 100644 index 2587ddc4d..000000000 --- a/src/AppCompatV7Binding/Transforms/Metadata.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/src/AppCompatV7Binding/project_appcompatv7.zip b/src/AppCompatV7Binding/project_appcompatv7.zip deleted file mode 100644 index b18689cc1..000000000 Binary files a/src/AppCompatV7Binding/project_appcompatv7.zip and /dev/null differ diff --git a/src/JavaFileStorageBindings/Additions/AboutAdditions.txt b/src/JavaFileStorageBindings/Additions/AboutAdditions.txt index 08caee33b..2775bd360 100644 --- a/src/JavaFileStorageBindings/Additions/AboutAdditions.txt +++ b/src/JavaFileStorageBindings/Additions/AboutAdditions.txt @@ -1,4 +1,4 @@ -Additions allow you to add arbitrary C# to the generated classes +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. @@ -11,9 +11,9 @@ this: public partial class Rectangle { public Rectangle (int x, int y, int width, int height) - { - // JNI bindings - } + { + // JNI bindings + } } Imagine we want to add a constructor to this class that takes a Point and @@ -23,9 +23,9 @@ 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) - { - } + this (location.X, location.Y, size.Width, size.Height) + { + } } At compile time, the additions class will be added to the generated class @@ -44,5 +44,5 @@ 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; } + public int Y { get; set; } } \ No newline at end of file diff --git a/src/JavaFileStorageBindings/GooglePlayServicesFroyoLib.dll b/src/JavaFileStorageBindings/GooglePlayServicesFroyoLib.dll deleted file mode 100644 index dd9ed4acb..000000000 Binary files a/src/JavaFileStorageBindings/GooglePlayServicesFroyoLib.dll and /dev/null differ diff --git a/src/JavaFileStorageBindings/Jars/AboutJars.txt b/src/JavaFileStorageBindings/Jars/AboutJars.txt deleted file mode 100644 index c359b62f4..000000000 --- a/src/JavaFileStorageBindings/Jars/AboutJars.txt +++ /dev/null @@ -1,24 +0,0 @@ -This directory is for Android .jars. - -There are 2 types of jars that are supported: - -== Input Jar == - -This is the jar that bindings should be generated for. - -For example, if you were binding the Google Maps library, this would -be Google's "maps.jar". - -Set the build action for these jars in the properties page to "InputJar". - - -== Reference Jars == - -These are jars that are referenced by the input jar. C# bindings will -not be created for these jars. These jars will be used to resolve -types used by the input jar. - -NOTE: Do not add "android.jar" as a reference jar. It will be added automatically -based on the Target Framework selected. - -Set the build action for these jars in the properties page to "ReferenceJar". \ No newline at end of file diff --git a/src/JavaFileStorageBindings/Jars/adal-1.1.19/AndroidManifest.xml b/src/JavaFileStorageBindings/Jars/adal-1.1.19/AndroidManifest.xml deleted file mode 100644 index 903dfc4dc..000000000 --- a/src/JavaFileStorageBindings/Jars/adal-1.1.19/AndroidManifest.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/JavaFileStorageBindings/Jars/adal-1.1.19/R.txt b/src/JavaFileStorageBindings/Jars/adal-1.1.19/R.txt deleted file mode 100644 index 7578dbb02..000000000 --- a/src/JavaFileStorageBindings/Jars/adal-1.1.19/R.txt +++ /dev/null @@ -1,21 +0,0 @@ -int dimen activity_horizontal_margin 0x7f030000 -int dimen activity_vertical_margin 0x7f030001 -int id LinearLayout1 0x7f060004 -int id com_microsoft_aad_adal_editDummyText 0x7f060002 -int id com_microsoft_aad_adal_progressBar 0x7f060003 -int id com_microsoft_aad_adal_webView1 0x7f060001 -int id editPassword 0x7f060006 -int id editUserName 0x7f060005 -int id webView1 0x7f060000 -int layout activity_authentication 0x7f020000 -int layout dialog_authentication 0x7f020001 -int layout http_auth_dialog 0x7f020002 -int string app_loading 0x7f040000 -int string broker_processing 0x7f040001 -int string http_auth_dialog_cancel 0x7f040006 -int string http_auth_dialog_login 0x7f040005 -int string http_auth_dialog_password 0x7f040003 -int string http_auth_dialog_title 0x7f040004 -int string http_auth_dialog_username 0x7f040002 -int style AppBaseTheme 0x7f050000 -int style AppTheme 0x7f050001 diff --git a/src/JavaFileStorageBindings/Jars/adal-1.1.19/classes-adal.jar b/src/JavaFileStorageBindings/Jars/adal-1.1.19/classes-adal.jar deleted file mode 100644 index 40260d291..000000000 Binary files a/src/JavaFileStorageBindings/Jars/adal-1.1.19/classes-adal.jar and /dev/null differ diff --git a/src/JavaFileStorageBindings/Jars/adal-1.1.19/res/layout/activity_authentication.xml b/src/JavaFileStorageBindings/Jars/adal-1.1.19/res/layout/activity_authentication.xml deleted file mode 100644 index 76856e6de..000000000 --- a/src/JavaFileStorageBindings/Jars/adal-1.1.19/res/layout/activity_authentication.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - diff --git a/src/JavaFileStorageBindings/Jars/adal-1.1.19/res/layout/dialog_authentication.xml b/src/JavaFileStorageBindings/Jars/adal-1.1.19/res/layout/dialog_authentication.xml deleted file mode 100644 index 52fe6909d..000000000 --- a/src/JavaFileStorageBindings/Jars/adal-1.1.19/res/layout/dialog_authentication.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/src/JavaFileStorageBindings/Jars/adal-1.1.19/res/layout/http_auth_dialog.xml b/src/JavaFileStorageBindings/Jars/adal-1.1.19/res/layout/http_auth_dialog.xml deleted file mode 100644 index 3b0c713b5..000000000 --- a/src/JavaFileStorageBindings/Jars/adal-1.1.19/res/layout/http_auth_dialog.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/src/JavaFileStorageBindings/Jars/adal-1.1.19/res/values-sw600dp/dimens.xml b/src/JavaFileStorageBindings/Jars/adal-1.1.19/res/values-sw600dp/dimens.xml deleted file mode 100644 index 44f01db75..000000000 --- a/src/JavaFileStorageBindings/Jars/adal-1.1.19/res/values-sw600dp/dimens.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - diff --git a/src/JavaFileStorageBindings/Jars/adal-1.1.19/res/values-sw720dp-land/dimens.xml b/src/JavaFileStorageBindings/Jars/adal-1.1.19/res/values-sw720dp-land/dimens.xml deleted file mode 100644 index 61e3fa8fb..000000000 --- a/src/JavaFileStorageBindings/Jars/adal-1.1.19/res/values-sw720dp-land/dimens.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - 128dp - - diff --git a/src/JavaFileStorageBindings/Jars/adal-1.1.19/res/values-v11/styles.xml b/src/JavaFileStorageBindings/Jars/adal-1.1.19/res/values-v11/styles.xml deleted file mode 100644 index 3c02242ad..000000000 --- a/src/JavaFileStorageBindings/Jars/adal-1.1.19/res/values-v11/styles.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - diff --git a/src/JavaFileStorageBindings/Jars/adal-1.1.19/res/values-v14/styles.xml b/src/JavaFileStorageBindings/Jars/adal-1.1.19/res/values-v14/styles.xml deleted file mode 100644 index a91fd0372..000000000 --- a/src/JavaFileStorageBindings/Jars/adal-1.1.19/res/values-v14/styles.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - diff --git a/src/JavaFileStorageBindings/Jars/adal-1.1.19/res/values/dimens.xml b/src/JavaFileStorageBindings/Jars/adal-1.1.19/res/values/dimens.xml deleted file mode 100644 index 55c1e5908..000000000 --- a/src/JavaFileStorageBindings/Jars/adal-1.1.19/res/values/dimens.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - 16dp - 16dp - - diff --git a/src/JavaFileStorageBindings/Jars/adal-1.1.19/res/values/strings.xml b/src/JavaFileStorageBindings/Jars/adal-1.1.19/res/values/strings.xml deleted file mode 100644 index 9e984b199..000000000 --- a/src/JavaFileStorageBindings/Jars/adal-1.1.19/res/values/strings.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - Loading… - Broker is processing - Username - Password - Enter your credentials - Login - Cancel - - \ No newline at end of file diff --git a/src/JavaFileStorageBindings/Jars/adal-1.1.19/res/values/styles.xml b/src/JavaFileStorageBindings/Jars/adal-1.1.19/res/values/styles.xml deleted file mode 100644 index 6ce89c7ba..000000000 --- a/src/JavaFileStorageBindings/Jars/adal-1.1.19/res/values/styles.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - diff --git a/src/JavaFileStorageBindings/Jars/google-1.17/google-api-client-android-1.17.0-rc-sources.jar b/src/JavaFileStorageBindings/Jars/google-1.17/google-api-client-android-1.17.0-rc-sources.jar deleted file mode 100644 index 932a07a32..000000000 Binary files a/src/JavaFileStorageBindings/Jars/google-1.17/google-api-client-android-1.17.0-rc-sources.jar and /dev/null differ diff --git a/src/JavaFileStorageBindings/Jars/google-1.17/google-api-client-xml-1.17.0-rc.jar b/src/JavaFileStorageBindings/Jars/google-1.17/google-api-client-xml-1.17.0-rc.jar deleted file mode 100644 index b56102581..000000000 Binary files a/src/JavaFileStorageBindings/Jars/google-1.17/google-api-client-xml-1.17.0-rc.jar and /dev/null differ diff --git a/src/JavaFileStorageBindings/Jars/google-1.17/google-api-services-drive-v1-rev105-1.17.0-rc.jar b/src/JavaFileStorageBindings/Jars/google-1.17/google-api-services-drive-v1-rev105-1.17.0-rc.jar deleted file mode 100644 index 86ce02449..000000000 Binary files a/src/JavaFileStorageBindings/Jars/google-1.17/google-api-services-drive-v1-rev105-1.17.0-rc.jar and /dev/null differ diff --git a/src/JavaFileStorageBindings/Jars/google-1.17/google-http-client-gson-1.17.0-rc-sources.jar b/src/JavaFileStorageBindings/Jars/google-1.17/google-http-client-gson-1.17.0-rc-sources.jar deleted file mode 100644 index 81aedb60d..000000000 Binary files a/src/JavaFileStorageBindings/Jars/google-1.17/google-http-client-gson-1.17.0-rc-sources.jar and /dev/null differ diff --git a/src/JavaFileStorageBindings/Jars/jackson-core-2.7.4.jar b/src/JavaFileStorageBindings/Jars/jackson-core-2.7.4.jar deleted file mode 100644 index 2e70b2eda..000000000 Binary files a/src/JavaFileStorageBindings/Jars/jackson-core-2.7.4.jar and /dev/null differ diff --git a/src/JavaFileStorageBindings/Jars/msa-auth-0.8.6.aar b/src/JavaFileStorageBindings/Jars/msa-auth-0.8.6.aar deleted file mode 100644 index c15fe3e7e..000000000 Binary files a/src/JavaFileStorageBindings/Jars/msa-auth-0.8.6.aar and /dev/null differ diff --git a/src/JavaFileStorageBindings/Jars/msa-auth-0.8.6/AndroidManifest.xml b/src/JavaFileStorageBindings/Jars/msa-auth-0.8.6/AndroidManifest.xml deleted file mode 100644 index 4eea788d1..000000000 --- a/src/JavaFileStorageBindings/Jars/msa-auth-0.8.6/AndroidManifest.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/src/JavaFileStorageBindings/Jars/msa-auth-0.8.6/R.txt b/src/JavaFileStorageBindings/Jars/msa-auth-0.8.6/R.txt deleted file mode 100644 index a80644bad..000000000 --- a/src/JavaFileStorageBindings/Jars/msa-auth-0.8.6/R.txt +++ /dev/null @@ -1 +0,0 @@ -int string app_name 0x7f020000 diff --git a/src/JavaFileStorageBindings/Jars/msa-auth-0.8.6/aapt/AndroidManifest.xml b/src/JavaFileStorageBindings/Jars/msa-auth-0.8.6/aapt/AndroidManifest.xml deleted file mode 100644 index 4eea788d1..000000000 --- a/src/JavaFileStorageBindings/Jars/msa-auth-0.8.6/aapt/AndroidManifest.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/src/JavaFileStorageBindings/Jars/msa-auth-0.8.6/classes-msa-auth.jar b/src/JavaFileStorageBindings/Jars/msa-auth-0.8.6/classes-msa-auth.jar deleted file mode 100644 index e8e608370..000000000 Binary files a/src/JavaFileStorageBindings/Jars/msa-auth-0.8.6/classes-msa-auth.jar and /dev/null differ diff --git a/src/JavaFileStorageBindings/Jars/msa-auth-0.8.6/res/values/values.xml b/src/JavaFileStorageBindings/Jars/msa-auth-0.8.6/res/values/values.xml deleted file mode 100644 index a80d8fc5f..000000000 --- a/src/JavaFileStorageBindings/Jars/msa-auth-0.8.6/res/values/values.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - msa-auth - \ No newline at end of file diff --git a/src/JavaFileStorageBindings/Jars/okhttp-4.10.0-RC1.jar b/src/JavaFileStorageBindings/Jars/okhttp-4.10.0-RC1.jar deleted file mode 100644 index 48ef9da8c..000000000 Binary files a/src/JavaFileStorageBindings/Jars/okhttp-4.10.0-RC1.jar and /dev/null differ diff --git a/src/JavaFileStorageBindings/Jars/okhttp-digest-2.5.jar b/src/JavaFileStorageBindings/Jars/okhttp-digest-2.5.jar deleted file mode 100644 index ba18ed812..000000000 Binary files a/src/JavaFileStorageBindings/Jars/okhttp-digest-2.5.jar and /dev/null differ diff --git a/src/JavaFileStorageBindings/Jars/okio-2.9.0.jar b/src/JavaFileStorageBindings/Jars/okio-2.9.0.jar deleted file mode 100644 index fe3b0403f..000000000 Binary files a/src/JavaFileStorageBindings/Jars/okio-2.9.0.jar and /dev/null differ diff --git a/src/JavaFileStorageBindings/Jars/onedrive-sdk-android-1.2.2.aar b/src/JavaFileStorageBindings/Jars/onedrive-sdk-android-1.2.2.aar deleted file mode 100644 index db0ac519e..000000000 Binary files a/src/JavaFileStorageBindings/Jars/onedrive-sdk-android-1.2.2.aar and /dev/null differ diff --git a/src/JavaFileStorageBindings/Jars/onedrive-sdk-android-1.2.2/AndroidManifest.xml b/src/JavaFileStorageBindings/Jars/onedrive-sdk-android-1.2.2/AndroidManifest.xml deleted file mode 100644 index b26377f91..000000000 --- a/src/JavaFileStorageBindings/Jars/onedrive-sdk-android-1.2.2/AndroidManifest.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/src/JavaFileStorageBindings/Jars/onedrive-sdk-android-1.2.2/R.txt b/src/JavaFileStorageBindings/Jars/onedrive-sdk-android-1.2.2/R.txt deleted file mode 100644 index 8fe0dccb2..000000000 --- a/src/JavaFileStorageBindings/Jars/onedrive-sdk-android-1.2.2/R.txt +++ /dev/null @@ -1,22 +0,0 @@ -int dimen activity_horizontal_margin 0x7f030000 -int dimen activity_vertical_margin 0x7f030001 -int id LinearLayout1 0x7f060004 -int id com_microsoft_aad_adal_editDummyText 0x7f060002 -int id com_microsoft_aad_adal_progressBar 0x7f060003 -int id com_microsoft_aad_adal_webView1 0x7f060001 -int id editPassword 0x7f060006 -int id editUserName 0x7f060005 -int id webView1 0x7f060000 -int layout activity_authentication 0x7f020000 -int layout dialog_authentication 0x7f020001 -int layout http_auth_dialog 0x7f020002 -int string app_loading 0x7f050000 -int string app_name 0x7f050001 -int string broker_processing 0x7f050002 -int string http_auth_dialog_cancel 0x7f050003 -int string http_auth_dialog_login 0x7f050004 -int string http_auth_dialog_password 0x7f050005 -int string http_auth_dialog_title 0x7f050006 -int string http_auth_dialog_username 0x7f050007 -int style AppBaseTheme 0x7f040000 -int style AppTheme 0x7f040001 diff --git a/src/JavaFileStorageBindings/Jars/onedrive-sdk-android-1.2.2/aapt/AndroidManifest.xml b/src/JavaFileStorageBindings/Jars/onedrive-sdk-android-1.2.2/aapt/AndroidManifest.xml deleted file mode 100644 index b26377f91..000000000 --- a/src/JavaFileStorageBindings/Jars/onedrive-sdk-android-1.2.2/aapt/AndroidManifest.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/src/JavaFileStorageBindings/Jars/onedrive-sdk-android-1.2.2/classes-onedrive-sdk.jar b/src/JavaFileStorageBindings/Jars/onedrive-sdk-android-1.2.2/classes-onedrive-sdk.jar deleted file mode 100644 index b806c8799..000000000 Binary files a/src/JavaFileStorageBindings/Jars/onedrive-sdk-android-1.2.2/classes-onedrive-sdk.jar and /dev/null differ diff --git a/src/JavaFileStorageBindings/JavaFileStorageBindings.csproj b/src/JavaFileStorageBindings/JavaFileStorageBindings.csproj index e3ca901c6..e29888f60 100644 --- a/src/JavaFileStorageBindings/JavaFileStorageBindings.csproj +++ b/src/JavaFileStorageBindings/JavaFileStorageBindings.csproj @@ -1,382 +1,38 @@ - - - - + - Debug - AnyCPU - {48574278-4779-4B3A-A9E4-9CF1BC285D0B} - {10368E6C-D01B-4462-8E8B-01FC667A7035};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - Properties - JavaFileStorageBindings - JavaFileStorageBindings - 512 - false - v13.0 - class-parse - XAJavaInterop1 - - + net8.0-android + 21 + enable + enable - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 0 - None - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - bin\ReleaseNoNet\ - TRACE - true - pdbonly - AnyCPU - prompt - MinimumRecommendedRules.ruleset - false - 4 - - - - - - - - - - - - ..\packages\Xamarin.AndroidX.Activity.1.6.0\lib\monoandroid12.0\Xamarin.AndroidX.Activity.dll - - - ..\packages\Xamarin.AndroidX.Annotation.1.5.0\lib\monoandroid12.0\Xamarin.AndroidX.Annotation.dll - - - ..\packages\Xamarin.AndroidX.Annotation.Experimental.1.3.0\lib\monoandroid12.0\Xamarin.AndroidX.Annotation.Experimental.dll - - - ..\packages\Xamarin.AndroidX.Arch.Core.Common.2.1.0.15\lib\monoandroid12.0\Xamarin.AndroidX.Arch.Core.Common.dll - - - ..\packages\Xamarin.AndroidX.Arch.Core.Runtime.2.1.0.15\lib\monoandroid12.0\Xamarin.AndroidX.Arch.Core.Runtime.dll - - - ..\packages\Xamarin.AndroidX.Collection.1.2.0.4\lib\monoandroid12.0\Xamarin.AndroidX.Collection.dll - - - ..\packages\Xamarin.AndroidX.Concurrent.Futures.1.1.0.9\lib\monoandroid12.0\Xamarin.AndroidX.Concurrent.Futures.dll - - - ..\packages\Xamarin.AndroidX.Core.1.9.0\lib\monoandroid12.0\Xamarin.AndroidX.Core.dll - - - ..\packages\Xamarin.AndroidX.Core.Core.Ktx.1.9.0\lib\monoandroid12.0\Xamarin.AndroidX.Core.Core.Ktx.dll - - - ..\packages\Xamarin.AndroidX.CustomView.1.1.0.13\lib\monoandroid12.0\Xamarin.AndroidX.CustomView.dll - - - ..\packages\Xamarin.AndroidX.Fragment.1.5.3\lib\monoandroid12.0\Xamarin.AndroidX.Fragment.dll - - - ..\packages\Xamarin.AndroidX.Lifecycle.Common.2.5.1\lib\monoandroid12.0\Xamarin.AndroidX.Lifecycle.Common.dll - - - ..\packages\Xamarin.AndroidX.Lifecycle.LiveData.Core.2.5.1\lib\monoandroid12.0\Xamarin.AndroidX.Lifecycle.LiveData.Core.dll - - - ..\packages\Xamarin.AndroidX.Lifecycle.Runtime.2.5.1\lib\monoandroid12.0\Xamarin.AndroidX.Lifecycle.Runtime.dll - - - ..\packages\Xamarin.AndroidX.Lifecycle.ViewModel.2.5.1\lib\monoandroid12.0\Xamarin.AndroidX.Lifecycle.ViewModel.dll - - - ..\packages\Xamarin.AndroidX.Lifecycle.ViewModelSavedState.2.5.1\lib\monoandroid12.0\Xamarin.AndroidX.Lifecycle.ViewModelSavedState.dll - - - ..\packages\Xamarin.AndroidX.Loader.1.1.0.14\lib\monoandroid12.0\Xamarin.AndroidX.Loader.dll - - - ..\packages\Xamarin.AndroidX.MultiDex.2.0.1.13\lib\monoandroid12.0\Xamarin.AndroidX.MultiDex.dll - - - ..\packages\Xamarin.AndroidX.SavedState.1.2.0\lib\monoandroid12.0\Xamarin.AndroidX.SavedState.dll - - - ..\packages\Xamarin.AndroidX.Tracing.Tracing.1.1.0.1\lib\monoandroid12.0\Xamarin.AndroidX.Tracing.Tracing.dll - - - ..\packages\Xamarin.AndroidX.VersionedParcelable.1.1.1.14\lib\monoandroid12.0\Xamarin.AndroidX.VersionedParcelable.dll - - - ..\packages\Xamarin.AndroidX.ViewPager.1.0.0.14\lib\monoandroid12.0\Xamarin.AndroidX.ViewPager.dll - - - ..\packages\Xamarin.Google.Guava.28.2.0.1\lib\monoandroid90\Xamarin.Google.Guava.dll - - - ..\packages\Xamarin.Google.Guava.FailureAccess.1.0.1.3\lib\monoandroid90\Xamarin.Google.Guava.FailureAccess.dll - - - ..\packages\Xamarin.Google.Guava.ListenableFuture.1.0.0.9\lib\monoandroid12.0\Xamarin.Google.Guava.ListenableFuture.dll - - - ..\packages\Xamarin.GooglePlayServices.Auth.120.4.0\lib\monoandroid12.0\Xamarin.GooglePlayServices.Auth.dll - - - ..\packages\Xamarin.GooglePlayServices.Auth.Api.Phone.118.0.1.2\lib\monoandroid12.0\Xamarin.GooglePlayServices.Auth.Api.Phone.dll - - - ..\packages\Xamarin.GooglePlayServices.Auth.Base.118.0.6\lib\monoandroid12.0\Xamarin.GooglePlayServices.Auth.Base.dll - - - ..\packages\Xamarin.GooglePlayServices.Base.118.1.0\lib\monoandroid12.0\Xamarin.GooglePlayServices.Base.dll - - - ..\packages\Xamarin.GooglePlayServices.Basement.118.1.0.1\lib\monoandroid12.0\Xamarin.GooglePlayServices.Basement.dll - - - ..\packages\Xamarin.GooglePlayServices.Fido.119.0.0\lib\monoandroid12.0\Xamarin.GooglePlayServices.Fido.dll - - - ..\packages\Xamarin.GooglePlayServices.Tasks.118.0.2\lib\monoandroid12.0\Xamarin.GooglePlayServices.Tasks.dll - - - ..\packages\Xamarin.Jetbrains.Annotations.23.0.0.4\lib\monoandroid12.0\Xamarin.Jetbrains.Annotations.dll - - - ..\packages\Xamarin.Kotlin.StdLib.1.7.10\lib\monoandroid12.0\Xamarin.Kotlin.StdLib.dll - - - ..\packages\Xamarin.Kotlin.StdLib.Common.1.7.10\lib\monoandroid12.0\Xamarin.Kotlin.StdLib.Common.dll - - - ..\packages\Xamarin.Kotlin.StdLib.Jdk7.1.7.10\lib\monoandroid12.0\Xamarin.Kotlin.StdLib.Jdk7.dll - - - ..\packages\Xamarin.Kotlin.StdLib.Jdk8.1.7.10\lib\monoandroid12.0\Xamarin.Kotlin.StdLib.Jdk8.dll - - - ..\packages\Xamarin.KotlinX.Coroutines.Android.1.6.4\lib\monoandroid12.0\Xamarin.KotlinX.Coroutines.Android.dll - - - ..\packages\Xamarin.KotlinX.Coroutines.Core.Jvm.1.6.4\lib\monoandroid12.0\Xamarin.KotlinX.Coroutines.Core.Jvm.dll - - - - - - - - Jars\JavaFileStorage-debug.aar - - - - - - - - - - - - - - - 19.0.0 - False - - - - - {2DB80C77-D46F-4970-B967-E9FFA9B2AC2E} - PCloudBindings - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Verwenden Sie die Wiederherstellung von NuGet-Paketen, um die fehlenden Dateien herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}". - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/JavaFileStorageBindings/Properties/AssemblyInfo.cs b/src/JavaFileStorageBindings/Properties/AssemblyInfo.cs deleted file mode 100644 index 7f2865c52..000000000 --- a/src/JavaFileStorageBindings/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using Android.App; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("JavaFileStorageBindings")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("JavaFileStorageBindings")] -[assembly: AssemblyCopyright("Copyright © 2013")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] -[assembly: ComVisible(false)] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/src/JavaFileStorageBindings/Transforms/EnumFields.xml b/src/JavaFileStorageBindings/Transforms/EnumFields.xml index 22959957e..4dddf452c 100644 --- a/src/JavaFileStorageBindings/Transforms/EnumFields.xml +++ b/src/JavaFileStorageBindings/Transforms/EnumFields.xml @@ -1,14 +1,3 @@  - + \ No newline at end of file diff --git a/src/JavaFileStorageBindings/Transforms/EnumMethods.xml b/src/JavaFileStorageBindings/Transforms/EnumMethods.xml index 49216c618..1918b0cf6 100644 --- a/src/JavaFileStorageBindings/Transforms/EnumMethods.xml +++ b/src/JavaFileStorageBindings/Transforms/EnumMethods.xml @@ -1,13 +1,3 @@  - + \ No newline at end of file diff --git a/src/JavaFileStorageBindings/Transforms/Metadata.xml b/src/JavaFileStorageBindings/Transforms/Metadata.xml index 196e67669..b10d28589 100644 --- a/src/JavaFileStorageBindings/Transforms/Metadata.xml +++ b/src/JavaFileStorageBindings/Transforms/Metadata.xml @@ -1,17 +1,16 @@ - + + + + + + diff --git a/src/JavaFileStorageBindings/Jars/dropbox-core-sdk-4.0.0.jar b/src/JavaFileStorageBindings/dropbox-core-sdk-5.4.6.jar similarity index 50% rename from src/JavaFileStorageBindings/Jars/dropbox-core-sdk-4.0.0.jar rename to src/JavaFileStorageBindings/dropbox-core-sdk-5.4.6.jar index e8376c42d..9004a26d7 100644 Binary files a/src/JavaFileStorageBindings/Jars/dropbox-core-sdk-4.0.0.jar and b/src/JavaFileStorageBindings/dropbox-core-sdk-5.4.6.jar differ diff --git a/src/JavaFileStorageBindings/Jars/gdrive/commons-logging-1.1.1.jar b/src/JavaFileStorageBindings/gdrive/commons-logging-1.1.1.jar similarity index 100% rename from src/JavaFileStorageBindings/Jars/gdrive/commons-logging-1.1.1.jar rename to src/JavaFileStorageBindings/gdrive/commons-logging-1.1.1.jar diff --git a/src/JavaFileStorageBindings/Jars/gdrive/google-api-client-1.30.5.jar b/src/JavaFileStorageBindings/gdrive/google-api-client-1.30.5.jar similarity index 100% rename from src/JavaFileStorageBindings/Jars/gdrive/google-api-client-1.30.5.jar rename to src/JavaFileStorageBindings/gdrive/google-api-client-1.30.5.jar diff --git a/src/JavaFileStorageBindings/Jars/gdrive/google-api-client-android-1.30.5.jar b/src/JavaFileStorageBindings/gdrive/google-api-client-android-1.30.5.jar similarity index 100% rename from src/JavaFileStorageBindings/Jars/gdrive/google-api-client-android-1.30.5.jar rename to src/JavaFileStorageBindings/gdrive/google-api-client-android-1.30.5.jar diff --git a/src/JavaFileStorageBindings/Jars/gdrive/google-api-services-drive-v2-rev102-1.16.0-rc.jar b/src/JavaFileStorageBindings/gdrive/google-api-services-drive-v2-rev102-1.16.0-rc.jar similarity index 100% rename from src/JavaFileStorageBindings/Jars/gdrive/google-api-services-drive-v2-rev102-1.16.0-rc.jar rename to src/JavaFileStorageBindings/gdrive/google-api-services-drive-v2-rev102-1.16.0-rc.jar diff --git a/src/JavaFileStorageBindings/Jars/gdrive/google-http-client-1.32.1.jar b/src/JavaFileStorageBindings/gdrive/google-http-client-1.32.1.jar similarity index 100% rename from src/JavaFileStorageBindings/Jars/gdrive/google-http-client-1.32.1.jar rename to src/JavaFileStorageBindings/gdrive/google-http-client-1.32.1.jar diff --git a/src/JavaFileStorageBindings/Jars/gdrive/google-http-client-android-1.32.1.jar b/src/JavaFileStorageBindings/gdrive/google-http-client-android-1.32.1.jar similarity index 100% rename from src/JavaFileStorageBindings/Jars/gdrive/google-http-client-android-1.32.1.jar rename to src/JavaFileStorageBindings/gdrive/google-http-client-android-1.32.1.jar diff --git a/src/JavaFileStorageBindings/Jars/gdrive/google-http-client-gson-1.16.0-rc.jar b/src/JavaFileStorageBindings/gdrive/google-http-client-gson-1.16.0-rc.jar similarity index 100% rename from src/JavaFileStorageBindings/Jars/gdrive/google-http-client-gson-1.16.0-rc.jar rename to src/JavaFileStorageBindings/gdrive/google-http-client-gson-1.16.0-rc.jar diff --git a/src/JavaFileStorageBindings/Jars/gdrive/google-http-client-jackson-1.16.0-rc.jar b/src/JavaFileStorageBindings/gdrive/google-http-client-jackson-1.16.0-rc.jar similarity index 100% rename from src/JavaFileStorageBindings/Jars/gdrive/google-http-client-jackson-1.16.0-rc.jar rename to src/JavaFileStorageBindings/gdrive/google-http-client-jackson-1.16.0-rc.jar diff --git a/src/JavaFileStorageBindings/Jars/gdrive/google-http-client-jackson2-1.32.1.jar b/src/JavaFileStorageBindings/gdrive/google-http-client-jackson2-1.32.1.jar similarity index 100% rename from src/JavaFileStorageBindings/Jars/gdrive/google-http-client-jackson2-1.32.1.jar rename to src/JavaFileStorageBindings/gdrive/google-http-client-jackson2-1.32.1.jar diff --git a/src/JavaFileStorageBindings/Jars/gdrive/google-oauth-client-1.30.4.jar b/src/JavaFileStorageBindings/gdrive/google-oauth-client-1.30.4.jar similarity index 100% rename from src/JavaFileStorageBindings/Jars/gdrive/google-oauth-client-1.30.4.jar rename to src/JavaFileStorageBindings/gdrive/google-oauth-client-1.30.4.jar diff --git a/src/JavaFileStorageBindings/Jars/gdrive/grpc-context-1.22.1.jar b/src/JavaFileStorageBindings/gdrive/grpc-context-1.22.1.jar similarity index 100% rename from src/JavaFileStorageBindings/Jars/gdrive/grpc-context-1.22.1.jar rename to src/JavaFileStorageBindings/gdrive/grpc-context-1.22.1.jar diff --git a/src/JavaFileStorageBindings/Jars/gdrive/httpclient-4.0.3.jar b/src/JavaFileStorageBindings/gdrive/httpclient-4.0.3.jar similarity index 100% rename from src/JavaFileStorageBindings/Jars/gdrive/httpclient-4.0.3.jar rename to src/JavaFileStorageBindings/gdrive/httpclient-4.0.3.jar diff --git a/src/JavaFileStorageBindings/Jars/gdrive/httpcore-4.0.1.jar b/src/JavaFileStorageBindings/gdrive/httpcore-4.0.1.jar similarity index 100% rename from src/JavaFileStorageBindings/Jars/gdrive/httpcore-4.0.1.jar rename to src/JavaFileStorageBindings/gdrive/httpcore-4.0.1.jar diff --git a/src/JavaFileStorageBindings/Jars/gdrive/httpmime-4.0.3.jar b/src/JavaFileStorageBindings/gdrive/httpmime-4.0.3.jar similarity index 100% rename from src/JavaFileStorageBindings/Jars/gdrive/httpmime-4.0.3.jar rename to src/JavaFileStorageBindings/gdrive/httpmime-4.0.3.jar diff --git a/src/JavaFileStorageBindings/Jars/gdrive/json_simple-1.1.jar b/src/JavaFileStorageBindings/gdrive/json_simple-1.1.jar similarity index 100% rename from src/JavaFileStorageBindings/Jars/gdrive/json_simple-1.1.jar rename to src/JavaFileStorageBindings/gdrive/json_simple-1.1.jar diff --git a/src/JavaFileStorageBindings/Jars/gdrive/jsr305-3.0.2.jar b/src/JavaFileStorageBindings/gdrive/jsr305-3.0.2.jar similarity index 100% rename from src/JavaFileStorageBindings/Jars/gdrive/jsr305-3.0.2.jar rename to src/JavaFileStorageBindings/gdrive/jsr305-3.0.2.jar diff --git a/src/JavaFileStorageBindings/Jars/gdrive/opencensus-api-0.24.0.jar b/src/JavaFileStorageBindings/gdrive/opencensus-api-0.24.0.jar similarity index 100% rename from src/JavaFileStorageBindings/Jars/gdrive/opencensus-api-0.24.0.jar rename to src/JavaFileStorageBindings/gdrive/opencensus-api-0.24.0.jar diff --git a/src/JavaFileStorageBindings/Jars/gdrive/opencensus-contrib-http-util-0.24.0.jar b/src/JavaFileStorageBindings/gdrive/opencensus-contrib-http-util-0.24.0.jar similarity index 100% rename from src/JavaFileStorageBindings/Jars/gdrive/opencensus-contrib-http-util-0.24.0.jar rename to src/JavaFileStorageBindings/gdrive/opencensus-contrib-http-util-0.24.0.jar diff --git a/src/JavaFileStorageBindings/Jars/gson-2.8.6.jar b/src/JavaFileStorageBindings/gson-2.8.6.jar similarity index 100% rename from src/JavaFileStorageBindings/Jars/gson-2.8.6.jar rename to src/JavaFileStorageBindings/gson-2.8.6.jar diff --git a/src/JavaFileStorageBindings/jackson-core-2.13.5.jar b/src/JavaFileStorageBindings/jackson-core-2.13.5.jar new file mode 100644 index 000000000..401dee317 Binary files /dev/null and b/src/JavaFileStorageBindings/jackson-core-2.13.5.jar differ diff --git a/src/JavaFileStorageBindings/okhttp-4.12.0.jar b/src/JavaFileStorageBindings/okhttp-4.12.0.jar new file mode 100644 index 000000000..faf3fa860 Binary files /dev/null and b/src/JavaFileStorageBindings/okhttp-4.12.0.jar differ diff --git a/src/JavaFileStorageBindings/okhttp-digest-3.1.0.jar b/src/JavaFileStorageBindings/okhttp-digest-3.1.0.jar new file mode 100644 index 000000000..af2c08aeb Binary files /dev/null and b/src/JavaFileStorageBindings/okhttp-digest-3.1.0.jar differ diff --git a/src/JavaFileStorageBindings/okio-3.6.0.jar b/src/JavaFileStorageBindings/okio-3.6.0.jar new file mode 100644 index 000000000..f31375628 Binary files /dev/null and b/src/JavaFileStorageBindings/okio-3.6.0.jar differ diff --git a/src/JavaFileStorageBindings/okio-jvm-3.6.0.jar b/src/JavaFileStorageBindings/okio-jvm-3.6.0.jar new file mode 100644 index 000000000..ec8ad90f2 Binary files /dev/null and b/src/JavaFileStorageBindings/okio-jvm-3.6.0.jar differ diff --git a/src/JavaFileStorageBindings/packages.config b/src/JavaFileStorageBindings/packages.config deleted file mode 100644 index 7c3dfc283..000000000 --- a/src/JavaFileStorageBindings/packages.config +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/KP2AKdbLibraryBinding/Additions/AboutAdditions.txt b/src/KP2AKdbLibraryBinding/Additions/AboutAdditions.txt deleted file mode 100644 index 08caee33b..000000000 --- a/src/KP2AKdbLibraryBinding/Additions/AboutAdditions.txt +++ /dev/null @@ -1,48 +0,0 @@ -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; } -} \ No newline at end of file diff --git a/src/KP2AKdbLibraryBinding/Jars/AboutJars.txt b/src/KP2AKdbLibraryBinding/Jars/AboutJars.txt deleted file mode 100644 index c359b62f4..000000000 --- a/src/KP2AKdbLibraryBinding/Jars/AboutJars.txt +++ /dev/null @@ -1,24 +0,0 @@ -This directory is for Android .jars. - -There are 2 types of jars that are supported: - -== Input Jar == - -This is the jar that bindings should be generated for. - -For example, if you were binding the Google Maps library, this would -be Google's "maps.jar". - -Set the build action for these jars in the properties page to "InputJar". - - -== Reference Jars == - -These are jars that are referenced by the input jar. C# bindings will -not be created for these jars. These jars will be used to resolve -types used by the input jar. - -NOTE: Do not add "android.jar" as a reference jar. It will be added automatically -based on the Target Framework selected. - -Set the build action for these jars in the properties page to "ReferenceJar". \ No newline at end of file diff --git a/src/KP2AKdbLibraryBinding/KP2AKdbLibraryBinding.csproj b/src/KP2AKdbLibraryBinding/KP2AKdbLibraryBinding.csproj index 404c3eb53..d39c9b67f 100644 --- a/src/KP2AKdbLibraryBinding/KP2AKdbLibraryBinding.csproj +++ b/src/KP2AKdbLibraryBinding/KP2AKdbLibraryBinding.csproj @@ -1,81 +1,21 @@ - - + - Debug - AnyCPU - {70D3844A-D9FA-4A64-B205-A84C6A822196} - {10368E6C-D01B-4462-8E8B-01FC667A7035};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - Properties - KP2AKdbLibraryBinding - KP2AKdbLibraryBinding - 512 - v8.0 - false - XAJavaInterop1 - class-parse - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - None - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - bin\ReleaseNoNet\ - TRACE - true - pdbonly - AnyCPU - prompt - MinimumRecommendedRules.ruleset - false - 4 + net8.0-android + 21 + enable + enable - - - + + + - + - - Jars\app-debug.aar - - - - - - + Designer - - - - - - - - + \ No newline at end of file diff --git a/src/KP2AKdbLibraryBinding/Properties/AssemblyInfo.cs b/src/KP2AKdbLibraryBinding/Properties/AssemblyInfo.cs deleted file mode 100644 index fba6323a2..000000000 --- a/src/KP2AKdbLibraryBinding/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using Android.App; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("KP2AKdbLibraryBinding")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("KP2AKdbLibraryBinding")] -[assembly: AssemblyCopyright("Copyright © 2014")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] -[assembly: ComVisible(false)] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] - diff --git a/src/KP2AKdbLibraryBinding/Transforms/EnumFields.xml b/src/KP2AKdbLibraryBinding/Transforms/EnumFields.xml index 22959957e..8ee086d7e 100644 --- a/src/KP2AKdbLibraryBinding/Transforms/EnumFields.xml +++ b/src/KP2AKdbLibraryBinding/Transforms/EnumFields.xml @@ -1,14 +1,3 @@  - + \ No newline at end of file diff --git a/src/KP2AKdbLibraryBinding/Transforms/EnumMethods.xml b/src/KP2AKdbLibraryBinding/Transforms/EnumMethods.xml index 49216c618..85202262a 100644 --- a/src/KP2AKdbLibraryBinding/Transforms/EnumMethods.xml +++ b/src/KP2AKdbLibraryBinding/Transforms/EnumMethods.xml @@ -1,13 +1,3 @@  - + \ No newline at end of file diff --git a/src/KP2AKdbLibraryBinding/Transforms/Metadata.xml b/src/KP2AKdbLibraryBinding/Transforms/Metadata.xml index 0dd04e931..6bd74e5f9 100644 --- a/src/KP2AKdbLibraryBinding/Transforms/Metadata.xml +++ b/src/KP2AKdbLibraryBinding/Transforms/Metadata.xml @@ -1,12 +1,5 @@ - + diff --git a/src/KeePass.sln b/src/KeePass.sln index bcd542c4c..2a9b97007 100644 --- a/src/KeePass.sln +++ b/src/KeePass.sln @@ -3,31 +3,31 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.4.33205.214 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KeePassLib2Android", "KeePassLib2Android\KeePassLib2Android.csproj", "{545B4A6B-8BBA-4FBE-92FC-4AC060122A54}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ZlibAndroid", "ZlibAndroid\ZlibAndroid.csproj", "{1DF9DA08-D2FE-4227-BD53-761CD3F6CA42}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kp2aKeyboardBinding", "Kp2aKeyboardBinding\Kp2aKeyboardBinding.csproj", "{A8779D4D-7C49-4C2F-82BD-2CDC448391DA}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TwofishCipher", "TwofishCipher\TwofishCipher.csproj", "{69D491AA-3A31-4467-8216-3641A4F157BE}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kp2aBusinessLogic", "Kp2aBusinessLogic\Kp2aBusinessLogic.csproj", "{53A9CB7F-6553-4BC0-B56B-9410BB2E59AA}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KeePassLib2Android", "KeePassLib2Android\KeePassLib2Android.csproj", "{6E1DCFE1-D86D-480F-BE02-BBE8FD4601F0}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TwofishCipher", "TwofishCipher\TwofishCipher.csproj", "{5CF675A5-9BEE-4720-BED9-D5BF14A2EBF9}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KP2AKdbLibraryBinding", "KP2AKdbLibraryBinding\KP2AKdbLibraryBinding.csproj", "{BF542E42-E7A9-4C71-AA3B-DAC0F959F0D5}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JavaFileStorageBindings", "JavaFileStorageBindings\JavaFileStorageBindings.csproj", "{48574278-4779-4B3A-A9E4-9CF1BC285D0B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AndroidFileChooserBinding", "AndroidFileChooserBinding\AndroidFileChooserBinding.csproj", "{C3A88E81-0809-49A4-A4EC-DF71A6200F41}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AndroidFileChooserBinding", "AndroidFileChooserBinding\AndroidFileChooserBinding.csproj", "{3C0F7FE5-639F-4422-A087-8B26CF862D1B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JavaFileStorageBindings", "JavaFileStorageBindings\JavaFileStorageBindings.csproj", "{4F2E6B45-2C9F-4DF6-A9DC-9F81DC8681BC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KP2AKdbLibraryBinding", "KP2AKdbLibraryBinding\KP2AKdbLibraryBinding.csproj", "{70D3844A-D9FA-4A64-B205-A84C6A822196}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kp2aBusinessLogic", "Kp2aBusinessLogic\Kp2aBusinessLogic.csproj", "{862D7A27-4211-4258-A4B0-741B4C0A73CF}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PluginSdkBinding", "PluginSdkBinding\PluginSdkBinding.csproj", "{3DA3911E-36DE-465E-8F15-F1991B6437E5}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kp2aAutofillParser", "Kp2aAutofillParser\Kp2aAutofillParser.csproj", "{2D5E3AEF-6EB2-4737-9ACB-921A22928682}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ZlibAndroid", "ZlibAndroid\ZlibAndroid.csproj", "{6C29A7E7-E016-4FC1-B1A0-DEE26AC711BB}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "keepass2android-app", "keepass2android-app\keepass2android-app.csproj", "{0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PCloudBindings", "PCloudBindings\PCloudBindings.csproj", "{2DB80C77-D46F-4970-B967-E9FFA9B2AC2E}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PluginSdkBinding", "PluginSdkBinding\PluginSdkBinding.csproj", "{C80CA4D0-C2A1-44FF-94DD-4097BDC58AF1}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "keepass2android-app", "keepass2android\keepass2android-app.csproj", "{D4C32E0A-0193-4496-9DB4-02CC126FD9F3}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kp2aKeyboardBinding", "Kp2aKeyboardBinding\Kp2aKeyboardBinding.csproj", "{B8CFEA61-5165-477A-BBED-6C711107522E}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kp2aAutofillParser", "Kp2aAutofillParser\Kp2aAutofillParser.csproj", "{39B12571-BAFE-4D3A-AEE2-4D74F14DFD96}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PCloudBindings", "PCloudBindings\PCloudBindings.csproj", "{D5F03D6D-B233-4716-93B5-18C2D965B5EC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kp2aAutofillParserTest", "Kp2aAutofillParserTest\Kp2aAutofillParserTest.csproj", "{3D1560FF-86BB-4CB4-8367-80BA13B81C38}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kp2aAutofillParser.Tests", "Kp2aAutofillParser.Tests\Kp2aAutofillParser.Tests.csproj", "{F5A2A8F9-C084-498F-9603-9D927BA5C626}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -45,296 +45,330 @@ Global ReleaseNoNet|x64 = ReleaseNoNet|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {545B4A6B-8BBA-4FBE-92FC-4AC060122A54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {545B4A6B-8BBA-4FBE-92FC-4AC060122A54}.Debug|Any CPU.Build.0 = Debug|Any CPU - {545B4A6B-8BBA-4FBE-92FC-4AC060122A54}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {545B4A6B-8BBA-4FBE-92FC-4AC060122A54}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {545B4A6B-8BBA-4FBE-92FC-4AC060122A54}.Debug|Win32.ActiveCfg = Debug|Any CPU - {545B4A6B-8BBA-4FBE-92FC-4AC060122A54}.Debug|Win32.Build.0 = Debug|Any CPU - {545B4A6B-8BBA-4FBE-92FC-4AC060122A54}.Debug|x64.ActiveCfg = Debug|Any CPU - {545B4A6B-8BBA-4FBE-92FC-4AC060122A54}.Debug|x64.Build.0 = Debug|Any CPU - {545B4A6B-8BBA-4FBE-92FC-4AC060122A54}.Release|Any CPU.ActiveCfg = Release|Any CPU - {545B4A6B-8BBA-4FBE-92FC-4AC060122A54}.Release|Any CPU.Build.0 = Release|Any CPU - {545B4A6B-8BBA-4FBE-92FC-4AC060122A54}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {545B4A6B-8BBA-4FBE-92FC-4AC060122A54}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {545B4A6B-8BBA-4FBE-92FC-4AC060122A54}.Release|Win32.ActiveCfg = Release|Any CPU - {545B4A6B-8BBA-4FBE-92FC-4AC060122A54}.Release|Win32.Build.0 = Release|Any CPU - {545B4A6B-8BBA-4FBE-92FC-4AC060122A54}.Release|x64.ActiveCfg = Release|Any CPU - {545B4A6B-8BBA-4FBE-92FC-4AC060122A54}.Release|x64.Build.0 = Release|Any CPU - {545B4A6B-8BBA-4FBE-92FC-4AC060122A54}.ReleaseNoNet|Any CPU.ActiveCfg = ReleaseNoNet|Any CPU - {545B4A6B-8BBA-4FBE-92FC-4AC060122A54}.ReleaseNoNet|Any CPU.Build.0 = ReleaseNoNet|Any CPU - {545B4A6B-8BBA-4FBE-92FC-4AC060122A54}.ReleaseNoNet|Mixed Platforms.ActiveCfg = ReleaseNoNet|Any CPU - {545B4A6B-8BBA-4FBE-92FC-4AC060122A54}.ReleaseNoNet|Mixed Platforms.Build.0 = ReleaseNoNet|Any CPU - {545B4A6B-8BBA-4FBE-92FC-4AC060122A54}.ReleaseNoNet|Win32.ActiveCfg = ReleaseNoNet|Any CPU - {545B4A6B-8BBA-4FBE-92FC-4AC060122A54}.ReleaseNoNet|x64.ActiveCfg = ReleaseNoNet|Any CPU - {A8779D4D-7C49-4C2F-82BD-2CDC448391DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A8779D4D-7C49-4C2F-82BD-2CDC448391DA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A8779D4D-7C49-4C2F-82BD-2CDC448391DA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {A8779D4D-7C49-4C2F-82BD-2CDC448391DA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {A8779D4D-7C49-4C2F-82BD-2CDC448391DA}.Debug|Win32.ActiveCfg = Debug|Any CPU - {A8779D4D-7C49-4C2F-82BD-2CDC448391DA}.Debug|Win32.Build.0 = Debug|Any CPU - {A8779D4D-7C49-4C2F-82BD-2CDC448391DA}.Debug|x64.ActiveCfg = Debug|Any CPU - {A8779D4D-7C49-4C2F-82BD-2CDC448391DA}.Debug|x64.Build.0 = Debug|Any CPU - {A8779D4D-7C49-4C2F-82BD-2CDC448391DA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A8779D4D-7C49-4C2F-82BD-2CDC448391DA}.Release|Any CPU.Build.0 = Release|Any CPU - {A8779D4D-7C49-4C2F-82BD-2CDC448391DA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {A8779D4D-7C49-4C2F-82BD-2CDC448391DA}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {A8779D4D-7C49-4C2F-82BD-2CDC448391DA}.Release|Win32.ActiveCfg = Release|Any CPU - {A8779D4D-7C49-4C2F-82BD-2CDC448391DA}.Release|Win32.Build.0 = Release|Any CPU - {A8779D4D-7C49-4C2F-82BD-2CDC448391DA}.Release|x64.ActiveCfg = Release|Any CPU - {A8779D4D-7C49-4C2F-82BD-2CDC448391DA}.Release|x64.Build.0 = Release|Any CPU - {A8779D4D-7C49-4C2F-82BD-2CDC448391DA}.ReleaseNoNet|Any CPU.ActiveCfg = Debug|Any CPU - {A8779D4D-7C49-4C2F-82BD-2CDC448391DA}.ReleaseNoNet|Any CPU.Build.0 = Debug|Any CPU - {A8779D4D-7C49-4C2F-82BD-2CDC448391DA}.ReleaseNoNet|Mixed Platforms.ActiveCfg = ReleaseNoNet|Any CPU - {A8779D4D-7C49-4C2F-82BD-2CDC448391DA}.ReleaseNoNet|Mixed Platforms.Build.0 = ReleaseNoNet|Any CPU - {A8779D4D-7C49-4C2F-82BD-2CDC448391DA}.ReleaseNoNet|Win32.ActiveCfg = Release|Any CPU - {A8779D4D-7C49-4C2F-82BD-2CDC448391DA}.ReleaseNoNet|x64.ActiveCfg = Release|Any CPU - {53A9CB7F-6553-4BC0-B56B-9410BB2E59AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {53A9CB7F-6553-4BC0-B56B-9410BB2E59AA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {53A9CB7F-6553-4BC0-B56B-9410BB2E59AA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {53A9CB7F-6553-4BC0-B56B-9410BB2E59AA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {53A9CB7F-6553-4BC0-B56B-9410BB2E59AA}.Debug|Win32.ActiveCfg = Debug|Any CPU - {53A9CB7F-6553-4BC0-B56B-9410BB2E59AA}.Debug|x64.ActiveCfg = Debug|Any CPU - {53A9CB7F-6553-4BC0-B56B-9410BB2E59AA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {53A9CB7F-6553-4BC0-B56B-9410BB2E59AA}.Release|Any CPU.Build.0 = Release|Any CPU - {53A9CB7F-6553-4BC0-B56B-9410BB2E59AA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {53A9CB7F-6553-4BC0-B56B-9410BB2E59AA}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {53A9CB7F-6553-4BC0-B56B-9410BB2E59AA}.Release|Win32.ActiveCfg = Release|Any CPU - {53A9CB7F-6553-4BC0-B56B-9410BB2E59AA}.Release|x64.ActiveCfg = Release|Any CPU - {53A9CB7F-6553-4BC0-B56B-9410BB2E59AA}.ReleaseNoNet|Any CPU.ActiveCfg = ReleaseNoNet|Any CPU - {53A9CB7F-6553-4BC0-B56B-9410BB2E59AA}.ReleaseNoNet|Any CPU.Build.0 = ReleaseNoNet|Any CPU - {53A9CB7F-6553-4BC0-B56B-9410BB2E59AA}.ReleaseNoNet|Mixed Platforms.ActiveCfg = ReleaseNoNet|Any CPU - {53A9CB7F-6553-4BC0-B56B-9410BB2E59AA}.ReleaseNoNet|Mixed Platforms.Build.0 = ReleaseNoNet|Any CPU - {53A9CB7F-6553-4BC0-B56B-9410BB2E59AA}.ReleaseNoNet|Win32.ActiveCfg = Release|Any CPU - {53A9CB7F-6553-4BC0-B56B-9410BB2E59AA}.ReleaseNoNet|x64.ActiveCfg = Release|Any CPU - {5CF675A5-9BEE-4720-BED9-D5BF14A2EBF9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5CF675A5-9BEE-4720-BED9-D5BF14A2EBF9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5CF675A5-9BEE-4720-BED9-D5BF14A2EBF9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {5CF675A5-9BEE-4720-BED9-D5BF14A2EBF9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {5CF675A5-9BEE-4720-BED9-D5BF14A2EBF9}.Debug|Win32.ActiveCfg = Debug|Any CPU - {5CF675A5-9BEE-4720-BED9-D5BF14A2EBF9}.Debug|x64.ActiveCfg = Debug|Any CPU - {5CF675A5-9BEE-4720-BED9-D5BF14A2EBF9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5CF675A5-9BEE-4720-BED9-D5BF14A2EBF9}.Release|Any CPU.Build.0 = Release|Any CPU - {5CF675A5-9BEE-4720-BED9-D5BF14A2EBF9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {5CF675A5-9BEE-4720-BED9-D5BF14A2EBF9}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {5CF675A5-9BEE-4720-BED9-D5BF14A2EBF9}.Release|Win32.ActiveCfg = Release|Any CPU - {5CF675A5-9BEE-4720-BED9-D5BF14A2EBF9}.Release|x64.ActiveCfg = Release|Any CPU - {5CF675A5-9BEE-4720-BED9-D5BF14A2EBF9}.ReleaseNoNet|Any CPU.ActiveCfg = ReleaseNoNet|Any CPU - {5CF675A5-9BEE-4720-BED9-D5BF14A2EBF9}.ReleaseNoNet|Any CPU.Build.0 = ReleaseNoNet|Any CPU - {5CF675A5-9BEE-4720-BED9-D5BF14A2EBF9}.ReleaseNoNet|Mixed Platforms.ActiveCfg = ReleaseNoNet|Any CPU - {5CF675A5-9BEE-4720-BED9-D5BF14A2EBF9}.ReleaseNoNet|Mixed Platforms.Build.0 = ReleaseNoNet|Any CPU - {5CF675A5-9BEE-4720-BED9-D5BF14A2EBF9}.ReleaseNoNet|Win32.ActiveCfg = Release|Any CPU - {5CF675A5-9BEE-4720-BED9-D5BF14A2EBF9}.ReleaseNoNet|x64.ActiveCfg = Release|Any CPU - {48574278-4779-4B3A-A9E4-9CF1BC285D0B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {48574278-4779-4B3A-A9E4-9CF1BC285D0B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {48574278-4779-4B3A-A9E4-9CF1BC285D0B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {48574278-4779-4B3A-A9E4-9CF1BC285D0B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {48574278-4779-4B3A-A9E4-9CF1BC285D0B}.Debug|Win32.ActiveCfg = Debug|Any CPU - {48574278-4779-4B3A-A9E4-9CF1BC285D0B}.Debug|Win32.Build.0 = Debug|Any CPU - {48574278-4779-4B3A-A9E4-9CF1BC285D0B}.Debug|x64.ActiveCfg = Debug|Any CPU - {48574278-4779-4B3A-A9E4-9CF1BC285D0B}.Debug|x64.Build.0 = Debug|Any CPU - {48574278-4779-4B3A-A9E4-9CF1BC285D0B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {48574278-4779-4B3A-A9E4-9CF1BC285D0B}.Release|Any CPU.Build.0 = Release|Any CPU - {48574278-4779-4B3A-A9E4-9CF1BC285D0B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {48574278-4779-4B3A-A9E4-9CF1BC285D0B}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {48574278-4779-4B3A-A9E4-9CF1BC285D0B}.Release|Win32.ActiveCfg = Release|Any CPU - {48574278-4779-4B3A-A9E4-9CF1BC285D0B}.Release|Win32.Build.0 = Release|Any CPU - {48574278-4779-4B3A-A9E4-9CF1BC285D0B}.Release|x64.ActiveCfg = Release|Any CPU - {48574278-4779-4B3A-A9E4-9CF1BC285D0B}.Release|x64.Build.0 = Release|Any CPU - {48574278-4779-4B3A-A9E4-9CF1BC285D0B}.ReleaseNoNet|Any CPU.ActiveCfg = ReleaseNoNet|Any CPU - {48574278-4779-4B3A-A9E4-9CF1BC285D0B}.ReleaseNoNet|Any CPU.Build.0 = ReleaseNoNet|Any CPU - {48574278-4779-4B3A-A9E4-9CF1BC285D0B}.ReleaseNoNet|Mixed Platforms.ActiveCfg = ReleaseNoNet|Any CPU - {48574278-4779-4B3A-A9E4-9CF1BC285D0B}.ReleaseNoNet|Mixed Platforms.Build.0 = ReleaseNoNet|Any CPU - {48574278-4779-4B3A-A9E4-9CF1BC285D0B}.ReleaseNoNet|Win32.ActiveCfg = ReleaseNoNet|Any CPU - {48574278-4779-4B3A-A9E4-9CF1BC285D0B}.ReleaseNoNet|Win32.Build.0 = ReleaseNoNet|Any CPU - {48574278-4779-4B3A-A9E4-9CF1BC285D0B}.ReleaseNoNet|x64.ActiveCfg = ReleaseNoNet|Any CPU - {48574278-4779-4B3A-A9E4-9CF1BC285D0B}.ReleaseNoNet|x64.Build.0 = ReleaseNoNet|Any CPU - {3C0F7FE5-639F-4422-A087-8B26CF862D1B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3C0F7FE5-639F-4422-A087-8B26CF862D1B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3C0F7FE5-639F-4422-A087-8B26CF862D1B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {3C0F7FE5-639F-4422-A087-8B26CF862D1B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {3C0F7FE5-639F-4422-A087-8B26CF862D1B}.Debug|Win32.ActiveCfg = Debug|Any CPU - {3C0F7FE5-639F-4422-A087-8B26CF862D1B}.Debug|x64.ActiveCfg = Debug|Any CPU - {3C0F7FE5-639F-4422-A087-8B26CF862D1B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3C0F7FE5-639F-4422-A087-8B26CF862D1B}.Release|Any CPU.Build.0 = Release|Any CPU - {3C0F7FE5-639F-4422-A087-8B26CF862D1B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {3C0F7FE5-639F-4422-A087-8B26CF862D1B}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {3C0F7FE5-639F-4422-A087-8B26CF862D1B}.Release|Win32.ActiveCfg = Release|Any CPU - {3C0F7FE5-639F-4422-A087-8B26CF862D1B}.Release|x64.ActiveCfg = Release|Any CPU - {3C0F7FE5-639F-4422-A087-8B26CF862D1B}.ReleaseNoNet|Any CPU.ActiveCfg = Release|Any CPU - {3C0F7FE5-639F-4422-A087-8B26CF862D1B}.ReleaseNoNet|Any CPU.Build.0 = Release|Any CPU - {3C0F7FE5-639F-4422-A087-8B26CF862D1B}.ReleaseNoNet|Mixed Platforms.ActiveCfg = ReleaseNoNet|Any CPU - {3C0F7FE5-639F-4422-A087-8B26CF862D1B}.ReleaseNoNet|Mixed Platforms.Build.0 = ReleaseNoNet|Any CPU - {3C0F7FE5-639F-4422-A087-8B26CF862D1B}.ReleaseNoNet|Win32.ActiveCfg = Release|Any CPU - {3C0F7FE5-639F-4422-A087-8B26CF862D1B}.ReleaseNoNet|x64.ActiveCfg = Release|Any CPU - {70D3844A-D9FA-4A64-B205-A84C6A822196}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {70D3844A-D9FA-4A64-B205-A84C6A822196}.Debug|Any CPU.Build.0 = Debug|Any CPU - {70D3844A-D9FA-4A64-B205-A84C6A822196}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {70D3844A-D9FA-4A64-B205-A84C6A822196}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {70D3844A-D9FA-4A64-B205-A84C6A822196}.Debug|Win32.ActiveCfg = Debug|Any CPU - {70D3844A-D9FA-4A64-B205-A84C6A822196}.Debug|x64.ActiveCfg = Debug|Any CPU - {70D3844A-D9FA-4A64-B205-A84C6A822196}.Release|Any CPU.ActiveCfg = Release|Any CPU - {70D3844A-D9FA-4A64-B205-A84C6A822196}.Release|Any CPU.Build.0 = Release|Any CPU - {70D3844A-D9FA-4A64-B205-A84C6A822196}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {70D3844A-D9FA-4A64-B205-A84C6A822196}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {70D3844A-D9FA-4A64-B205-A84C6A822196}.Release|Win32.ActiveCfg = Release|Any CPU - {70D3844A-D9FA-4A64-B205-A84C6A822196}.Release|x64.ActiveCfg = Release|Any CPU - {70D3844A-D9FA-4A64-B205-A84C6A822196}.ReleaseNoNet|Any CPU.ActiveCfg = Release|Any CPU - {70D3844A-D9FA-4A64-B205-A84C6A822196}.ReleaseNoNet|Any CPU.Build.0 = Release|Any CPU - {70D3844A-D9FA-4A64-B205-A84C6A822196}.ReleaseNoNet|Mixed Platforms.ActiveCfg = ReleaseNoNet|Any CPU - {70D3844A-D9FA-4A64-B205-A84C6A822196}.ReleaseNoNet|Mixed Platforms.Build.0 = ReleaseNoNet|Any CPU - {70D3844A-D9FA-4A64-B205-A84C6A822196}.ReleaseNoNet|Win32.ActiveCfg = Release|Any CPU - {70D3844A-D9FA-4A64-B205-A84C6A822196}.ReleaseNoNet|x64.ActiveCfg = Release|Any CPU - {3DA3911E-36DE-465E-8F15-F1991B6437E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3DA3911E-36DE-465E-8F15-F1991B6437E5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3DA3911E-36DE-465E-8F15-F1991B6437E5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {3DA3911E-36DE-465E-8F15-F1991B6437E5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {3DA3911E-36DE-465E-8F15-F1991B6437E5}.Debug|Win32.ActiveCfg = Debug|Any CPU - {3DA3911E-36DE-465E-8F15-F1991B6437E5}.Debug|x64.ActiveCfg = Debug|Any CPU - {3DA3911E-36DE-465E-8F15-F1991B6437E5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3DA3911E-36DE-465E-8F15-F1991B6437E5}.Release|Any CPU.Build.0 = Release|Any CPU - {3DA3911E-36DE-465E-8F15-F1991B6437E5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {3DA3911E-36DE-465E-8F15-F1991B6437E5}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {3DA3911E-36DE-465E-8F15-F1991B6437E5}.Release|Win32.ActiveCfg = Release|Any CPU - {3DA3911E-36DE-465E-8F15-F1991B6437E5}.Release|x64.ActiveCfg = Release|Any CPU - {3DA3911E-36DE-465E-8F15-F1991B6437E5}.ReleaseNoNet|Any CPU.ActiveCfg = Release|Any CPU - {3DA3911E-36DE-465E-8F15-F1991B6437E5}.ReleaseNoNet|Any CPU.Build.0 = Release|Any CPU - {3DA3911E-36DE-465E-8F15-F1991B6437E5}.ReleaseNoNet|Mixed Platforms.ActiveCfg = ReleaseNoNet|Any CPU - {3DA3911E-36DE-465E-8F15-F1991B6437E5}.ReleaseNoNet|Mixed Platforms.Build.0 = ReleaseNoNet|Any CPU - {3DA3911E-36DE-465E-8F15-F1991B6437E5}.ReleaseNoNet|Win32.ActiveCfg = Release|Any CPU - {3DA3911E-36DE-465E-8F15-F1991B6437E5}.ReleaseNoNet|x64.ActiveCfg = Release|Any CPU - {6C29A7E7-E016-4FC1-B1A0-DEE26AC711BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6C29A7E7-E016-4FC1-B1A0-DEE26AC711BB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6C29A7E7-E016-4FC1-B1A0-DEE26AC711BB}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {6C29A7E7-E016-4FC1-B1A0-DEE26AC711BB}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {6C29A7E7-E016-4FC1-B1A0-DEE26AC711BB}.Debug|Win32.ActiveCfg = Debug|Any CPU - {6C29A7E7-E016-4FC1-B1A0-DEE26AC711BB}.Debug|Win32.Build.0 = Debug|Any CPU - {6C29A7E7-E016-4FC1-B1A0-DEE26AC711BB}.Debug|x64.ActiveCfg = Debug|Any CPU - {6C29A7E7-E016-4FC1-B1A0-DEE26AC711BB}.Debug|x64.Build.0 = Debug|Any CPU - {6C29A7E7-E016-4FC1-B1A0-DEE26AC711BB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6C29A7E7-E016-4FC1-B1A0-DEE26AC711BB}.Release|Any CPU.Build.0 = Release|Any CPU - {6C29A7E7-E016-4FC1-B1A0-DEE26AC711BB}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {6C29A7E7-E016-4FC1-B1A0-DEE26AC711BB}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {6C29A7E7-E016-4FC1-B1A0-DEE26AC711BB}.Release|Win32.ActiveCfg = Release|Any CPU - {6C29A7E7-E016-4FC1-B1A0-DEE26AC711BB}.Release|Win32.Build.0 = Release|Any CPU - {6C29A7E7-E016-4FC1-B1A0-DEE26AC711BB}.Release|x64.ActiveCfg = Release|Any CPU - {6C29A7E7-E016-4FC1-B1A0-DEE26AC711BB}.Release|x64.Build.0 = Release|Any CPU - {6C29A7E7-E016-4FC1-B1A0-DEE26AC711BB}.ReleaseNoNet|Any CPU.ActiveCfg = ReleaseNoNet|Any CPU - {6C29A7E7-E016-4FC1-B1A0-DEE26AC711BB}.ReleaseNoNet|Any CPU.Build.0 = ReleaseNoNet|Any CPU - {6C29A7E7-E016-4FC1-B1A0-DEE26AC711BB}.ReleaseNoNet|Mixed Platforms.ActiveCfg = Release|Any CPU - {6C29A7E7-E016-4FC1-B1A0-DEE26AC711BB}.ReleaseNoNet|Mixed Platforms.Build.0 = Release|Any CPU - {6C29A7E7-E016-4FC1-B1A0-DEE26AC711BB}.ReleaseNoNet|Win32.ActiveCfg = Release|Any CPU - {6C29A7E7-E016-4FC1-B1A0-DEE26AC711BB}.ReleaseNoNet|Win32.Build.0 = Release|Any CPU - {6C29A7E7-E016-4FC1-B1A0-DEE26AC711BB}.ReleaseNoNet|x64.ActiveCfg = Release|Any CPU - {6C29A7E7-E016-4FC1-B1A0-DEE26AC711BB}.ReleaseNoNet|x64.Build.0 = Release|Any CPU - {2DB80C77-D46F-4970-B967-E9FFA9B2AC2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2DB80C77-D46F-4970-B967-E9FFA9B2AC2E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2DB80C77-D46F-4970-B967-E9FFA9B2AC2E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {2DB80C77-D46F-4970-B967-E9FFA9B2AC2E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {2DB80C77-D46F-4970-B967-E9FFA9B2AC2E}.Debug|Win32.ActiveCfg = Debug|Any CPU - {2DB80C77-D46F-4970-B967-E9FFA9B2AC2E}.Debug|Win32.Build.0 = Debug|Any CPU - {2DB80C77-D46F-4970-B967-E9FFA9B2AC2E}.Debug|x64.ActiveCfg = Debug|Any CPU - {2DB80C77-D46F-4970-B967-E9FFA9B2AC2E}.Debug|x64.Build.0 = Debug|Any CPU - {2DB80C77-D46F-4970-B967-E9FFA9B2AC2E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2DB80C77-D46F-4970-B967-E9FFA9B2AC2E}.Release|Any CPU.Build.0 = Release|Any CPU - {2DB80C77-D46F-4970-B967-E9FFA9B2AC2E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {2DB80C77-D46F-4970-B967-E9FFA9B2AC2E}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {2DB80C77-D46F-4970-B967-E9FFA9B2AC2E}.Release|Win32.ActiveCfg = Release|Any CPU - {2DB80C77-D46F-4970-B967-E9FFA9B2AC2E}.Release|Win32.Build.0 = Release|Any CPU - {2DB80C77-D46F-4970-B967-E9FFA9B2AC2E}.Release|x64.ActiveCfg = Release|Any CPU - {2DB80C77-D46F-4970-B967-E9FFA9B2AC2E}.Release|x64.Build.0 = Release|Any CPU - {2DB80C77-D46F-4970-B967-E9FFA9B2AC2E}.ReleaseNoNet|Any CPU.ActiveCfg = ReleaseNoNet|Any CPU - {2DB80C77-D46F-4970-B967-E9FFA9B2AC2E}.ReleaseNoNet|Any CPU.Build.0 = ReleaseNoNet|Any CPU - {2DB80C77-D46F-4970-B967-E9FFA9B2AC2E}.ReleaseNoNet|Mixed Platforms.ActiveCfg = ReleaseNoNet|Any CPU - {2DB80C77-D46F-4970-B967-E9FFA9B2AC2E}.ReleaseNoNet|Mixed Platforms.Build.0 = ReleaseNoNet|Any CPU - {2DB80C77-D46F-4970-B967-E9FFA9B2AC2E}.ReleaseNoNet|Win32.ActiveCfg = ReleaseNoNet|Any CPU - {2DB80C77-D46F-4970-B967-E9FFA9B2AC2E}.ReleaseNoNet|Win32.Build.0 = ReleaseNoNet|Any CPU - {2DB80C77-D46F-4970-B967-E9FFA9B2AC2E}.ReleaseNoNet|x64.ActiveCfg = ReleaseNoNet|Any CPU - {2DB80C77-D46F-4970-B967-E9FFA9B2AC2E}.ReleaseNoNet|x64.Build.0 = ReleaseNoNet|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.Debug|Mixed Platforms.Deploy.0 = Debug|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.Debug|Win32.ActiveCfg = Debug|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.Debug|Win32.Build.0 = Debug|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.Debug|Win32.Deploy.0 = Debug|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.Debug|x64.ActiveCfg = Debug|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.Debug|x64.Build.0 = Debug|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.Debug|x64.Deploy.0 = Debug|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.Release|Any CPU.Build.0 = Release|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.Release|Any CPU.Deploy.0 = Release|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.Release|Mixed Platforms.Deploy.0 = Release|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.Release|Win32.ActiveCfg = Release|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.Release|Win32.Build.0 = Release|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.Release|Win32.Deploy.0 = Release|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.Release|x64.ActiveCfg = Release|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.Release|x64.Build.0 = Release|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.Release|x64.Deploy.0 = Release|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.ReleaseNoNet|Any CPU.ActiveCfg = Release|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.ReleaseNoNet|Any CPU.Build.0 = Release|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.ReleaseNoNet|Any CPU.Deploy.0 = Release|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.ReleaseNoNet|Mixed Platforms.ActiveCfg = Release|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.ReleaseNoNet|Mixed Platforms.Build.0 = Release|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.ReleaseNoNet|Mixed Platforms.Deploy.0 = Release|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.ReleaseNoNet|Win32.ActiveCfg = Release|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.ReleaseNoNet|Win32.Build.0 = Release|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.ReleaseNoNet|Win32.Deploy.0 = Release|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.ReleaseNoNet|x64.ActiveCfg = Release|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.ReleaseNoNet|x64.Build.0 = Release|Any CPU - {D4C32E0A-0193-4496-9DB4-02CC126FD9F3}.ReleaseNoNet|x64.Deploy.0 = Release|Any CPU - {39B12571-BAFE-4D3A-AEE2-4D74F14DFD96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {39B12571-BAFE-4D3A-AEE2-4D74F14DFD96}.Debug|Any CPU.Build.0 = Debug|Any CPU - {39B12571-BAFE-4D3A-AEE2-4D74F14DFD96}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {39B12571-BAFE-4D3A-AEE2-4D74F14DFD96}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {39B12571-BAFE-4D3A-AEE2-4D74F14DFD96}.Debug|Win32.ActiveCfg = Debug|Any CPU - {39B12571-BAFE-4D3A-AEE2-4D74F14DFD96}.Debug|Win32.Build.0 = Debug|Any CPU - {39B12571-BAFE-4D3A-AEE2-4D74F14DFD96}.Debug|x64.ActiveCfg = Debug|Any CPU - {39B12571-BAFE-4D3A-AEE2-4D74F14DFD96}.Debug|x64.Build.0 = Debug|Any CPU - {39B12571-BAFE-4D3A-AEE2-4D74F14DFD96}.Release|Any CPU.ActiveCfg = Release|Any CPU - {39B12571-BAFE-4D3A-AEE2-4D74F14DFD96}.Release|Any CPU.Build.0 = Release|Any CPU - {39B12571-BAFE-4D3A-AEE2-4D74F14DFD96}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {39B12571-BAFE-4D3A-AEE2-4D74F14DFD96}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {39B12571-BAFE-4D3A-AEE2-4D74F14DFD96}.Release|Win32.ActiveCfg = Release|Any CPU - {39B12571-BAFE-4D3A-AEE2-4D74F14DFD96}.Release|Win32.Build.0 = Release|Any CPU - {39B12571-BAFE-4D3A-AEE2-4D74F14DFD96}.Release|x64.ActiveCfg = Release|Any CPU - {39B12571-BAFE-4D3A-AEE2-4D74F14DFD96}.Release|x64.Build.0 = Release|Any CPU - {39B12571-BAFE-4D3A-AEE2-4D74F14DFD96}.ReleaseNoNet|Any CPU.ActiveCfg = Release|Any CPU - {39B12571-BAFE-4D3A-AEE2-4D74F14DFD96}.ReleaseNoNet|Any CPU.Build.0 = Release|Any CPU - {39B12571-BAFE-4D3A-AEE2-4D74F14DFD96}.ReleaseNoNet|Mixed Platforms.ActiveCfg = Release|Any CPU - {39B12571-BAFE-4D3A-AEE2-4D74F14DFD96}.ReleaseNoNet|Mixed Platforms.Build.0 = Release|Any CPU - {39B12571-BAFE-4D3A-AEE2-4D74F14DFD96}.ReleaseNoNet|Win32.ActiveCfg = Release|Any CPU - {39B12571-BAFE-4D3A-AEE2-4D74F14DFD96}.ReleaseNoNet|Win32.Build.0 = Release|Any CPU - {39B12571-BAFE-4D3A-AEE2-4D74F14DFD96}.ReleaseNoNet|x64.ActiveCfg = Release|Any CPU - {39B12571-BAFE-4D3A-AEE2-4D74F14DFD96}.ReleaseNoNet|x64.Build.0 = Release|Any CPU - {3D1560FF-86BB-4CB4-8367-80BA13B81C38}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3D1560FF-86BB-4CB4-8367-80BA13B81C38}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3D1560FF-86BB-4CB4-8367-80BA13B81C38}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {3D1560FF-86BB-4CB4-8367-80BA13B81C38}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {3D1560FF-86BB-4CB4-8367-80BA13B81C38}.Debug|Win32.ActiveCfg = Debug|Any CPU - {3D1560FF-86BB-4CB4-8367-80BA13B81C38}.Debug|Win32.Build.0 = Debug|Any CPU - {3D1560FF-86BB-4CB4-8367-80BA13B81C38}.Debug|x64.ActiveCfg = Debug|Any CPU - {3D1560FF-86BB-4CB4-8367-80BA13B81C38}.Debug|x64.Build.0 = Debug|Any CPU - {3D1560FF-86BB-4CB4-8367-80BA13B81C38}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3D1560FF-86BB-4CB4-8367-80BA13B81C38}.Release|Any CPU.Build.0 = Release|Any CPU - {3D1560FF-86BB-4CB4-8367-80BA13B81C38}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {3D1560FF-86BB-4CB4-8367-80BA13B81C38}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {3D1560FF-86BB-4CB4-8367-80BA13B81C38}.Release|Win32.ActiveCfg = Release|Any CPU - {3D1560FF-86BB-4CB4-8367-80BA13B81C38}.Release|Win32.Build.0 = Release|Any CPU - {3D1560FF-86BB-4CB4-8367-80BA13B81C38}.Release|x64.ActiveCfg = Release|Any CPU - {3D1560FF-86BB-4CB4-8367-80BA13B81C38}.Release|x64.Build.0 = Release|Any CPU - {3D1560FF-86BB-4CB4-8367-80BA13B81C38}.ReleaseNoNet|Any CPU.ActiveCfg = Release|Any CPU - {3D1560FF-86BB-4CB4-8367-80BA13B81C38}.ReleaseNoNet|Any CPU.Build.0 = Release|Any CPU - {3D1560FF-86BB-4CB4-8367-80BA13B81C38}.ReleaseNoNet|Mixed Platforms.ActiveCfg = Release|Any CPU - {3D1560FF-86BB-4CB4-8367-80BA13B81C38}.ReleaseNoNet|Mixed Platforms.Build.0 = Release|Any CPU - {3D1560FF-86BB-4CB4-8367-80BA13B81C38}.ReleaseNoNet|Win32.ActiveCfg = Release|Any CPU - {3D1560FF-86BB-4CB4-8367-80BA13B81C38}.ReleaseNoNet|Win32.Build.0 = Release|Any CPU - {3D1560FF-86BB-4CB4-8367-80BA13B81C38}.ReleaseNoNet|x64.ActiveCfg = Release|Any CPU - {3D1560FF-86BB-4CB4-8367-80BA13B81C38}.ReleaseNoNet|x64.Build.0 = Release|Any CPU + {1DF9DA08-D2FE-4227-BD53-761CD3F6CA42}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1DF9DA08-D2FE-4227-BD53-761CD3F6CA42}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1DF9DA08-D2FE-4227-BD53-761CD3F6CA42}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {1DF9DA08-D2FE-4227-BD53-761CD3F6CA42}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {1DF9DA08-D2FE-4227-BD53-761CD3F6CA42}.Debug|Win32.ActiveCfg = Debug|Any CPU + {1DF9DA08-D2FE-4227-BD53-761CD3F6CA42}.Debug|Win32.Build.0 = Debug|Any CPU + {1DF9DA08-D2FE-4227-BD53-761CD3F6CA42}.Debug|x64.ActiveCfg = Debug|Any CPU + {1DF9DA08-D2FE-4227-BD53-761CD3F6CA42}.Debug|x64.Build.0 = Debug|Any CPU + {1DF9DA08-D2FE-4227-BD53-761CD3F6CA42}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1DF9DA08-D2FE-4227-BD53-761CD3F6CA42}.Release|Any CPU.Build.0 = Release|Any CPU + {1DF9DA08-D2FE-4227-BD53-761CD3F6CA42}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {1DF9DA08-D2FE-4227-BD53-761CD3F6CA42}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {1DF9DA08-D2FE-4227-BD53-761CD3F6CA42}.Release|Win32.ActiveCfg = Release|Any CPU + {1DF9DA08-D2FE-4227-BD53-761CD3F6CA42}.Release|Win32.Build.0 = Release|Any CPU + {1DF9DA08-D2FE-4227-BD53-761CD3F6CA42}.Release|x64.ActiveCfg = Release|Any CPU + {1DF9DA08-D2FE-4227-BD53-761CD3F6CA42}.Release|x64.Build.0 = Release|Any CPU + {1DF9DA08-D2FE-4227-BD53-761CD3F6CA42}.ReleaseNoNet|Any CPU.ActiveCfg = Release|Any CPU + {1DF9DA08-D2FE-4227-BD53-761CD3F6CA42}.ReleaseNoNet|Any CPU.Build.0 = Release|Any CPU + {1DF9DA08-D2FE-4227-BD53-761CD3F6CA42}.ReleaseNoNet|Mixed Platforms.ActiveCfg = Release|Any CPU + {1DF9DA08-D2FE-4227-BD53-761CD3F6CA42}.ReleaseNoNet|Mixed Platforms.Build.0 = Release|Any CPU + {1DF9DA08-D2FE-4227-BD53-761CD3F6CA42}.ReleaseNoNet|Win32.ActiveCfg = Release|Any CPU + {1DF9DA08-D2FE-4227-BD53-761CD3F6CA42}.ReleaseNoNet|Win32.Build.0 = Release|Any CPU + {1DF9DA08-D2FE-4227-BD53-761CD3F6CA42}.ReleaseNoNet|x64.ActiveCfg = Release|Any CPU + {1DF9DA08-D2FE-4227-BD53-761CD3F6CA42}.ReleaseNoNet|x64.Build.0 = Release|Any CPU + {69D491AA-3A31-4467-8216-3641A4F157BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {69D491AA-3A31-4467-8216-3641A4F157BE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {69D491AA-3A31-4467-8216-3641A4F157BE}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {69D491AA-3A31-4467-8216-3641A4F157BE}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {69D491AA-3A31-4467-8216-3641A4F157BE}.Debug|Win32.ActiveCfg = Debug|Any CPU + {69D491AA-3A31-4467-8216-3641A4F157BE}.Debug|Win32.Build.0 = Debug|Any CPU + {69D491AA-3A31-4467-8216-3641A4F157BE}.Debug|x64.ActiveCfg = Debug|Any CPU + {69D491AA-3A31-4467-8216-3641A4F157BE}.Debug|x64.Build.0 = Debug|Any CPU + {69D491AA-3A31-4467-8216-3641A4F157BE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {69D491AA-3A31-4467-8216-3641A4F157BE}.Release|Any CPU.Build.0 = Release|Any CPU + {69D491AA-3A31-4467-8216-3641A4F157BE}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {69D491AA-3A31-4467-8216-3641A4F157BE}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {69D491AA-3A31-4467-8216-3641A4F157BE}.Release|Win32.ActiveCfg = Release|Any CPU + {69D491AA-3A31-4467-8216-3641A4F157BE}.Release|Win32.Build.0 = Release|Any CPU + {69D491AA-3A31-4467-8216-3641A4F157BE}.Release|x64.ActiveCfg = Release|Any CPU + {69D491AA-3A31-4467-8216-3641A4F157BE}.Release|x64.Build.0 = Release|Any CPU + {69D491AA-3A31-4467-8216-3641A4F157BE}.ReleaseNoNet|Any CPU.ActiveCfg = Release|Any CPU + {69D491AA-3A31-4467-8216-3641A4F157BE}.ReleaseNoNet|Any CPU.Build.0 = Release|Any CPU + {69D491AA-3A31-4467-8216-3641A4F157BE}.ReleaseNoNet|Mixed Platforms.ActiveCfg = Release|Any CPU + {69D491AA-3A31-4467-8216-3641A4F157BE}.ReleaseNoNet|Mixed Platforms.Build.0 = Release|Any CPU + {69D491AA-3A31-4467-8216-3641A4F157BE}.ReleaseNoNet|Win32.ActiveCfg = Release|Any CPU + {69D491AA-3A31-4467-8216-3641A4F157BE}.ReleaseNoNet|Win32.Build.0 = Release|Any CPU + {69D491AA-3A31-4467-8216-3641A4F157BE}.ReleaseNoNet|x64.ActiveCfg = Release|Any CPU + {69D491AA-3A31-4467-8216-3641A4F157BE}.ReleaseNoNet|x64.Build.0 = Release|Any CPU + {6E1DCFE1-D86D-480F-BE02-BBE8FD4601F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6E1DCFE1-D86D-480F-BE02-BBE8FD4601F0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6E1DCFE1-D86D-480F-BE02-BBE8FD4601F0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {6E1DCFE1-D86D-480F-BE02-BBE8FD4601F0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {6E1DCFE1-D86D-480F-BE02-BBE8FD4601F0}.Debug|Win32.ActiveCfg = Debug|Any CPU + {6E1DCFE1-D86D-480F-BE02-BBE8FD4601F0}.Debug|Win32.Build.0 = Debug|Any CPU + {6E1DCFE1-D86D-480F-BE02-BBE8FD4601F0}.Debug|x64.ActiveCfg = Debug|Any CPU + {6E1DCFE1-D86D-480F-BE02-BBE8FD4601F0}.Debug|x64.Build.0 = Debug|Any CPU + {6E1DCFE1-D86D-480F-BE02-BBE8FD4601F0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6E1DCFE1-D86D-480F-BE02-BBE8FD4601F0}.Release|Any CPU.Build.0 = Release|Any CPU + {6E1DCFE1-D86D-480F-BE02-BBE8FD4601F0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {6E1DCFE1-D86D-480F-BE02-BBE8FD4601F0}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {6E1DCFE1-D86D-480F-BE02-BBE8FD4601F0}.Release|Win32.ActiveCfg = Release|Any CPU + {6E1DCFE1-D86D-480F-BE02-BBE8FD4601F0}.Release|Win32.Build.0 = Release|Any CPU + {6E1DCFE1-D86D-480F-BE02-BBE8FD4601F0}.Release|x64.ActiveCfg = Release|Any CPU + {6E1DCFE1-D86D-480F-BE02-BBE8FD4601F0}.Release|x64.Build.0 = Release|Any CPU + {6E1DCFE1-D86D-480F-BE02-BBE8FD4601F0}.ReleaseNoNet|Any CPU.ActiveCfg = Release|Any CPU + {6E1DCFE1-D86D-480F-BE02-BBE8FD4601F0}.ReleaseNoNet|Any CPU.Build.0 = Release|Any CPU + {6E1DCFE1-D86D-480F-BE02-BBE8FD4601F0}.ReleaseNoNet|Mixed Platforms.ActiveCfg = Release|Any CPU + {6E1DCFE1-D86D-480F-BE02-BBE8FD4601F0}.ReleaseNoNet|Mixed Platforms.Build.0 = Release|Any CPU + {6E1DCFE1-D86D-480F-BE02-BBE8FD4601F0}.ReleaseNoNet|Win32.ActiveCfg = Release|Any CPU + {6E1DCFE1-D86D-480F-BE02-BBE8FD4601F0}.ReleaseNoNet|Win32.Build.0 = Release|Any CPU + {6E1DCFE1-D86D-480F-BE02-BBE8FD4601F0}.ReleaseNoNet|x64.ActiveCfg = Release|Any CPU + {6E1DCFE1-D86D-480F-BE02-BBE8FD4601F0}.ReleaseNoNet|x64.Build.0 = Release|Any CPU + {BF542E42-E7A9-4C71-AA3B-DAC0F959F0D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BF542E42-E7A9-4C71-AA3B-DAC0F959F0D5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BF542E42-E7A9-4C71-AA3B-DAC0F959F0D5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {BF542E42-E7A9-4C71-AA3B-DAC0F959F0D5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {BF542E42-E7A9-4C71-AA3B-DAC0F959F0D5}.Debug|Win32.ActiveCfg = Debug|Any CPU + {BF542E42-E7A9-4C71-AA3B-DAC0F959F0D5}.Debug|Win32.Build.0 = Debug|Any CPU + {BF542E42-E7A9-4C71-AA3B-DAC0F959F0D5}.Debug|x64.ActiveCfg = Debug|Any CPU + {BF542E42-E7A9-4C71-AA3B-DAC0F959F0D5}.Debug|x64.Build.0 = Debug|Any CPU + {BF542E42-E7A9-4C71-AA3B-DAC0F959F0D5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BF542E42-E7A9-4C71-AA3B-DAC0F959F0D5}.Release|Any CPU.Build.0 = Release|Any CPU + {BF542E42-E7A9-4C71-AA3B-DAC0F959F0D5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {BF542E42-E7A9-4C71-AA3B-DAC0F959F0D5}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {BF542E42-E7A9-4C71-AA3B-DAC0F959F0D5}.Release|Win32.ActiveCfg = Release|Any CPU + {BF542E42-E7A9-4C71-AA3B-DAC0F959F0D5}.Release|Win32.Build.0 = Release|Any CPU + {BF542E42-E7A9-4C71-AA3B-DAC0F959F0D5}.Release|x64.ActiveCfg = Release|Any CPU + {BF542E42-E7A9-4C71-AA3B-DAC0F959F0D5}.Release|x64.Build.0 = Release|Any CPU + {BF542E42-E7A9-4C71-AA3B-DAC0F959F0D5}.ReleaseNoNet|Any CPU.ActiveCfg = Release|Any CPU + {BF542E42-E7A9-4C71-AA3B-DAC0F959F0D5}.ReleaseNoNet|Any CPU.Build.0 = Release|Any CPU + {BF542E42-E7A9-4C71-AA3B-DAC0F959F0D5}.ReleaseNoNet|Mixed Platforms.ActiveCfg = Release|Any CPU + {BF542E42-E7A9-4C71-AA3B-DAC0F959F0D5}.ReleaseNoNet|Mixed Platforms.Build.0 = Release|Any CPU + {BF542E42-E7A9-4C71-AA3B-DAC0F959F0D5}.ReleaseNoNet|Win32.ActiveCfg = Release|Any CPU + {BF542E42-E7A9-4C71-AA3B-DAC0F959F0D5}.ReleaseNoNet|Win32.Build.0 = Release|Any CPU + {BF542E42-E7A9-4C71-AA3B-DAC0F959F0D5}.ReleaseNoNet|x64.ActiveCfg = Release|Any CPU + {BF542E42-E7A9-4C71-AA3B-DAC0F959F0D5}.ReleaseNoNet|x64.Build.0 = Release|Any CPU + {C3A88E81-0809-49A4-A4EC-DF71A6200F41}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C3A88E81-0809-49A4-A4EC-DF71A6200F41}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C3A88E81-0809-49A4-A4EC-DF71A6200F41}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {C3A88E81-0809-49A4-A4EC-DF71A6200F41}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {C3A88E81-0809-49A4-A4EC-DF71A6200F41}.Debug|Win32.ActiveCfg = Debug|Any CPU + {C3A88E81-0809-49A4-A4EC-DF71A6200F41}.Debug|Win32.Build.0 = Debug|Any CPU + {C3A88E81-0809-49A4-A4EC-DF71A6200F41}.Debug|x64.ActiveCfg = Debug|Any CPU + {C3A88E81-0809-49A4-A4EC-DF71A6200F41}.Debug|x64.Build.0 = Debug|Any CPU + {C3A88E81-0809-49A4-A4EC-DF71A6200F41}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C3A88E81-0809-49A4-A4EC-DF71A6200F41}.Release|Any CPU.Build.0 = Release|Any CPU + {C3A88E81-0809-49A4-A4EC-DF71A6200F41}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {C3A88E81-0809-49A4-A4EC-DF71A6200F41}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {C3A88E81-0809-49A4-A4EC-DF71A6200F41}.Release|Win32.ActiveCfg = Release|Any CPU + {C3A88E81-0809-49A4-A4EC-DF71A6200F41}.Release|Win32.Build.0 = Release|Any CPU + {C3A88E81-0809-49A4-A4EC-DF71A6200F41}.Release|x64.ActiveCfg = Release|Any CPU + {C3A88E81-0809-49A4-A4EC-DF71A6200F41}.Release|x64.Build.0 = Release|Any CPU + {C3A88E81-0809-49A4-A4EC-DF71A6200F41}.ReleaseNoNet|Any CPU.ActiveCfg = Release|Any CPU + {C3A88E81-0809-49A4-A4EC-DF71A6200F41}.ReleaseNoNet|Any CPU.Build.0 = Release|Any CPU + {C3A88E81-0809-49A4-A4EC-DF71A6200F41}.ReleaseNoNet|Mixed Platforms.ActiveCfg = Release|Any CPU + {C3A88E81-0809-49A4-A4EC-DF71A6200F41}.ReleaseNoNet|Mixed Platforms.Build.0 = Release|Any CPU + {C3A88E81-0809-49A4-A4EC-DF71A6200F41}.ReleaseNoNet|Win32.ActiveCfg = Release|Any CPU + {C3A88E81-0809-49A4-A4EC-DF71A6200F41}.ReleaseNoNet|Win32.Build.0 = Release|Any CPU + {C3A88E81-0809-49A4-A4EC-DF71A6200F41}.ReleaseNoNet|x64.ActiveCfg = Release|Any CPU + {C3A88E81-0809-49A4-A4EC-DF71A6200F41}.ReleaseNoNet|x64.Build.0 = Release|Any CPU + {4F2E6B45-2C9F-4DF6-A9DC-9F81DC8681BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4F2E6B45-2C9F-4DF6-A9DC-9F81DC8681BC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4F2E6B45-2C9F-4DF6-A9DC-9F81DC8681BC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {4F2E6B45-2C9F-4DF6-A9DC-9F81DC8681BC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {4F2E6B45-2C9F-4DF6-A9DC-9F81DC8681BC}.Debug|Win32.ActiveCfg = Debug|Any CPU + {4F2E6B45-2C9F-4DF6-A9DC-9F81DC8681BC}.Debug|Win32.Build.0 = Debug|Any CPU + {4F2E6B45-2C9F-4DF6-A9DC-9F81DC8681BC}.Debug|x64.ActiveCfg = Debug|Any CPU + {4F2E6B45-2C9F-4DF6-A9DC-9F81DC8681BC}.Debug|x64.Build.0 = Debug|Any CPU + {4F2E6B45-2C9F-4DF6-A9DC-9F81DC8681BC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4F2E6B45-2C9F-4DF6-A9DC-9F81DC8681BC}.Release|Any CPU.Build.0 = Release|Any CPU + {4F2E6B45-2C9F-4DF6-A9DC-9F81DC8681BC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {4F2E6B45-2C9F-4DF6-A9DC-9F81DC8681BC}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {4F2E6B45-2C9F-4DF6-A9DC-9F81DC8681BC}.Release|Win32.ActiveCfg = Release|Any CPU + {4F2E6B45-2C9F-4DF6-A9DC-9F81DC8681BC}.Release|Win32.Build.0 = Release|Any CPU + {4F2E6B45-2C9F-4DF6-A9DC-9F81DC8681BC}.Release|x64.ActiveCfg = Release|Any CPU + {4F2E6B45-2C9F-4DF6-A9DC-9F81DC8681BC}.Release|x64.Build.0 = Release|Any CPU + {4F2E6B45-2C9F-4DF6-A9DC-9F81DC8681BC}.ReleaseNoNet|Any CPU.ActiveCfg = Release|Any CPU + {4F2E6B45-2C9F-4DF6-A9DC-9F81DC8681BC}.ReleaseNoNet|Any CPU.Build.0 = Release|Any CPU + {4F2E6B45-2C9F-4DF6-A9DC-9F81DC8681BC}.ReleaseNoNet|Mixed Platforms.ActiveCfg = Release|Any CPU + {4F2E6B45-2C9F-4DF6-A9DC-9F81DC8681BC}.ReleaseNoNet|Mixed Platforms.Build.0 = Release|Any CPU + {4F2E6B45-2C9F-4DF6-A9DC-9F81DC8681BC}.ReleaseNoNet|Win32.ActiveCfg = Release|Any CPU + {4F2E6B45-2C9F-4DF6-A9DC-9F81DC8681BC}.ReleaseNoNet|Win32.Build.0 = Release|Any CPU + {4F2E6B45-2C9F-4DF6-A9DC-9F81DC8681BC}.ReleaseNoNet|x64.ActiveCfg = Release|Any CPU + {4F2E6B45-2C9F-4DF6-A9DC-9F81DC8681BC}.ReleaseNoNet|x64.Build.0 = Release|Any CPU + {862D7A27-4211-4258-A4B0-741B4C0A73CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {862D7A27-4211-4258-A4B0-741B4C0A73CF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {862D7A27-4211-4258-A4B0-741B4C0A73CF}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {862D7A27-4211-4258-A4B0-741B4C0A73CF}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {862D7A27-4211-4258-A4B0-741B4C0A73CF}.Debug|Win32.ActiveCfg = Debug|Any CPU + {862D7A27-4211-4258-A4B0-741B4C0A73CF}.Debug|Win32.Build.0 = Debug|Any CPU + {862D7A27-4211-4258-A4B0-741B4C0A73CF}.Debug|x64.ActiveCfg = Debug|Any CPU + {862D7A27-4211-4258-A4B0-741B4C0A73CF}.Debug|x64.Build.0 = Debug|Any CPU + {862D7A27-4211-4258-A4B0-741B4C0A73CF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {862D7A27-4211-4258-A4B0-741B4C0A73CF}.Release|Any CPU.Build.0 = Release|Any CPU + {862D7A27-4211-4258-A4B0-741B4C0A73CF}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {862D7A27-4211-4258-A4B0-741B4C0A73CF}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {862D7A27-4211-4258-A4B0-741B4C0A73CF}.Release|Win32.ActiveCfg = Release|Any CPU + {862D7A27-4211-4258-A4B0-741B4C0A73CF}.Release|Win32.Build.0 = Release|Any CPU + {862D7A27-4211-4258-A4B0-741B4C0A73CF}.Release|x64.ActiveCfg = Release|Any CPU + {862D7A27-4211-4258-A4B0-741B4C0A73CF}.Release|x64.Build.0 = Release|Any CPU + {862D7A27-4211-4258-A4B0-741B4C0A73CF}.ReleaseNoNet|Any CPU.ActiveCfg = Release|Any CPU + {862D7A27-4211-4258-A4B0-741B4C0A73CF}.ReleaseNoNet|Any CPU.Build.0 = Release|Any CPU + {862D7A27-4211-4258-A4B0-741B4C0A73CF}.ReleaseNoNet|Mixed Platforms.ActiveCfg = Release|Any CPU + {862D7A27-4211-4258-A4B0-741B4C0A73CF}.ReleaseNoNet|Mixed Platforms.Build.0 = Release|Any CPU + {862D7A27-4211-4258-A4B0-741B4C0A73CF}.ReleaseNoNet|Win32.ActiveCfg = Release|Any CPU + {862D7A27-4211-4258-A4B0-741B4C0A73CF}.ReleaseNoNet|Win32.Build.0 = Release|Any CPU + {862D7A27-4211-4258-A4B0-741B4C0A73CF}.ReleaseNoNet|x64.ActiveCfg = Release|Any CPU + {862D7A27-4211-4258-A4B0-741B4C0A73CF}.ReleaseNoNet|x64.Build.0 = Release|Any CPU + {2D5E3AEF-6EB2-4737-9ACB-921A22928682}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2D5E3AEF-6EB2-4737-9ACB-921A22928682}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2D5E3AEF-6EB2-4737-9ACB-921A22928682}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {2D5E3AEF-6EB2-4737-9ACB-921A22928682}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {2D5E3AEF-6EB2-4737-9ACB-921A22928682}.Debug|Win32.ActiveCfg = Debug|Any CPU + {2D5E3AEF-6EB2-4737-9ACB-921A22928682}.Debug|Win32.Build.0 = Debug|Any CPU + {2D5E3AEF-6EB2-4737-9ACB-921A22928682}.Debug|x64.ActiveCfg = Debug|Any CPU + {2D5E3AEF-6EB2-4737-9ACB-921A22928682}.Debug|x64.Build.0 = Debug|Any CPU + {2D5E3AEF-6EB2-4737-9ACB-921A22928682}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2D5E3AEF-6EB2-4737-9ACB-921A22928682}.Release|Any CPU.Build.0 = Release|Any CPU + {2D5E3AEF-6EB2-4737-9ACB-921A22928682}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {2D5E3AEF-6EB2-4737-9ACB-921A22928682}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {2D5E3AEF-6EB2-4737-9ACB-921A22928682}.Release|Win32.ActiveCfg = Release|Any CPU + {2D5E3AEF-6EB2-4737-9ACB-921A22928682}.Release|Win32.Build.0 = Release|Any CPU + {2D5E3AEF-6EB2-4737-9ACB-921A22928682}.Release|x64.ActiveCfg = Release|Any CPU + {2D5E3AEF-6EB2-4737-9ACB-921A22928682}.Release|x64.Build.0 = Release|Any CPU + {2D5E3AEF-6EB2-4737-9ACB-921A22928682}.ReleaseNoNet|Any CPU.ActiveCfg = Release|Any CPU + {2D5E3AEF-6EB2-4737-9ACB-921A22928682}.ReleaseNoNet|Any CPU.Build.0 = Release|Any CPU + {2D5E3AEF-6EB2-4737-9ACB-921A22928682}.ReleaseNoNet|Mixed Platforms.ActiveCfg = Release|Any CPU + {2D5E3AEF-6EB2-4737-9ACB-921A22928682}.ReleaseNoNet|Mixed Platforms.Build.0 = Release|Any CPU + {2D5E3AEF-6EB2-4737-9ACB-921A22928682}.ReleaseNoNet|Win32.ActiveCfg = Release|Any CPU + {2D5E3AEF-6EB2-4737-9ACB-921A22928682}.ReleaseNoNet|Win32.Build.0 = Release|Any CPU + {2D5E3AEF-6EB2-4737-9ACB-921A22928682}.ReleaseNoNet|x64.ActiveCfg = Release|Any CPU + {2D5E3AEF-6EB2-4737-9ACB-921A22928682}.ReleaseNoNet|x64.Build.0 = Release|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.Debug|Mixed Platforms.Deploy.0 = Debug|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.Debug|Win32.ActiveCfg = Debug|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.Debug|Win32.Build.0 = Debug|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.Debug|Win32.Deploy.0 = Debug|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.Debug|x64.ActiveCfg = Debug|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.Debug|x64.Build.0 = Debug|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.Debug|x64.Deploy.0 = Debug|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.Release|Any CPU.Build.0 = Release|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.Release|Any CPU.Deploy.0 = Release|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.Release|Mixed Platforms.Deploy.0 = Release|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.Release|Win32.ActiveCfg = Release|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.Release|Win32.Build.0 = Release|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.Release|Win32.Deploy.0 = Release|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.Release|x64.ActiveCfg = Release|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.Release|x64.Build.0 = Release|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.Release|x64.Deploy.0 = Release|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.ReleaseNoNet|Any CPU.ActiveCfg = Release|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.ReleaseNoNet|Any CPU.Build.0 = Release|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.ReleaseNoNet|Any CPU.Deploy.0 = Release|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.ReleaseNoNet|Mixed Platforms.ActiveCfg = Release|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.ReleaseNoNet|Mixed Platforms.Build.0 = Release|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.ReleaseNoNet|Mixed Platforms.Deploy.0 = Release|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.ReleaseNoNet|Win32.ActiveCfg = Release|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.ReleaseNoNet|Win32.Build.0 = Release|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.ReleaseNoNet|Win32.Deploy.0 = Release|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.ReleaseNoNet|x64.ActiveCfg = Release|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.ReleaseNoNet|x64.Build.0 = Release|Any CPU + {0CCDA3EB-8A24-4A42-BC91-A4DD254504E7}.ReleaseNoNet|x64.Deploy.0 = Release|Any CPU + {C80CA4D0-C2A1-44FF-94DD-4097BDC58AF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C80CA4D0-C2A1-44FF-94DD-4097BDC58AF1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C80CA4D0-C2A1-44FF-94DD-4097BDC58AF1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {C80CA4D0-C2A1-44FF-94DD-4097BDC58AF1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {C80CA4D0-C2A1-44FF-94DD-4097BDC58AF1}.Debug|Win32.ActiveCfg = Debug|Any CPU + {C80CA4D0-C2A1-44FF-94DD-4097BDC58AF1}.Debug|Win32.Build.0 = Debug|Any CPU + {C80CA4D0-C2A1-44FF-94DD-4097BDC58AF1}.Debug|x64.ActiveCfg = Debug|Any CPU + {C80CA4D0-C2A1-44FF-94DD-4097BDC58AF1}.Debug|x64.Build.0 = Debug|Any CPU + {C80CA4D0-C2A1-44FF-94DD-4097BDC58AF1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C80CA4D0-C2A1-44FF-94DD-4097BDC58AF1}.Release|Any CPU.Build.0 = Release|Any CPU + {C80CA4D0-C2A1-44FF-94DD-4097BDC58AF1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {C80CA4D0-C2A1-44FF-94DD-4097BDC58AF1}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {C80CA4D0-C2A1-44FF-94DD-4097BDC58AF1}.Release|Win32.ActiveCfg = Release|Any CPU + {C80CA4D0-C2A1-44FF-94DD-4097BDC58AF1}.Release|Win32.Build.0 = Release|Any CPU + {C80CA4D0-C2A1-44FF-94DD-4097BDC58AF1}.Release|x64.ActiveCfg = Release|Any CPU + {C80CA4D0-C2A1-44FF-94DD-4097BDC58AF1}.Release|x64.Build.0 = Release|Any CPU + {C80CA4D0-C2A1-44FF-94DD-4097BDC58AF1}.ReleaseNoNet|Any CPU.ActiveCfg = Release|Any CPU + {C80CA4D0-C2A1-44FF-94DD-4097BDC58AF1}.ReleaseNoNet|Any CPU.Build.0 = Release|Any CPU + {C80CA4D0-C2A1-44FF-94DD-4097BDC58AF1}.ReleaseNoNet|Mixed Platforms.ActiveCfg = Release|Any CPU + {C80CA4D0-C2A1-44FF-94DD-4097BDC58AF1}.ReleaseNoNet|Mixed Platforms.Build.0 = Release|Any CPU + {C80CA4D0-C2A1-44FF-94DD-4097BDC58AF1}.ReleaseNoNet|Win32.ActiveCfg = Release|Any CPU + {C80CA4D0-C2A1-44FF-94DD-4097BDC58AF1}.ReleaseNoNet|Win32.Build.0 = Release|Any CPU + {C80CA4D0-C2A1-44FF-94DD-4097BDC58AF1}.ReleaseNoNet|x64.ActiveCfg = Release|Any CPU + {C80CA4D0-C2A1-44FF-94DD-4097BDC58AF1}.ReleaseNoNet|x64.Build.0 = Release|Any CPU + {B8CFEA61-5165-477A-BBED-6C711107522E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B8CFEA61-5165-477A-BBED-6C711107522E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B8CFEA61-5165-477A-BBED-6C711107522E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {B8CFEA61-5165-477A-BBED-6C711107522E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {B8CFEA61-5165-477A-BBED-6C711107522E}.Debug|Win32.ActiveCfg = Debug|Any CPU + {B8CFEA61-5165-477A-BBED-6C711107522E}.Debug|Win32.Build.0 = Debug|Any CPU + {B8CFEA61-5165-477A-BBED-6C711107522E}.Debug|x64.ActiveCfg = Debug|Any CPU + {B8CFEA61-5165-477A-BBED-6C711107522E}.Debug|x64.Build.0 = Debug|Any CPU + {B8CFEA61-5165-477A-BBED-6C711107522E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B8CFEA61-5165-477A-BBED-6C711107522E}.Release|Any CPU.Build.0 = Release|Any CPU + {B8CFEA61-5165-477A-BBED-6C711107522E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {B8CFEA61-5165-477A-BBED-6C711107522E}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {B8CFEA61-5165-477A-BBED-6C711107522E}.Release|Win32.ActiveCfg = Release|Any CPU + {B8CFEA61-5165-477A-BBED-6C711107522E}.Release|Win32.Build.0 = Release|Any CPU + {B8CFEA61-5165-477A-BBED-6C711107522E}.Release|x64.ActiveCfg = Release|Any CPU + {B8CFEA61-5165-477A-BBED-6C711107522E}.Release|x64.Build.0 = Release|Any CPU + {B8CFEA61-5165-477A-BBED-6C711107522E}.ReleaseNoNet|Any CPU.ActiveCfg = Release|Any CPU + {B8CFEA61-5165-477A-BBED-6C711107522E}.ReleaseNoNet|Any CPU.Build.0 = Release|Any CPU + {B8CFEA61-5165-477A-BBED-6C711107522E}.ReleaseNoNet|Mixed Platforms.ActiveCfg = Release|Any CPU + {B8CFEA61-5165-477A-BBED-6C711107522E}.ReleaseNoNet|Mixed Platforms.Build.0 = Release|Any CPU + {B8CFEA61-5165-477A-BBED-6C711107522E}.ReleaseNoNet|Win32.ActiveCfg = Release|Any CPU + {B8CFEA61-5165-477A-BBED-6C711107522E}.ReleaseNoNet|Win32.Build.0 = Release|Any CPU + {B8CFEA61-5165-477A-BBED-6C711107522E}.ReleaseNoNet|x64.ActiveCfg = Release|Any CPU + {B8CFEA61-5165-477A-BBED-6C711107522E}.ReleaseNoNet|x64.Build.0 = Release|Any CPU + {D5F03D6D-B233-4716-93B5-18C2D965B5EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D5F03D6D-B233-4716-93B5-18C2D965B5EC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D5F03D6D-B233-4716-93B5-18C2D965B5EC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D5F03D6D-B233-4716-93B5-18C2D965B5EC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {D5F03D6D-B233-4716-93B5-18C2D965B5EC}.Debug|Win32.ActiveCfg = Debug|Any CPU + {D5F03D6D-B233-4716-93B5-18C2D965B5EC}.Debug|Win32.Build.0 = Debug|Any CPU + {D5F03D6D-B233-4716-93B5-18C2D965B5EC}.Debug|x64.ActiveCfg = Debug|Any CPU + {D5F03D6D-B233-4716-93B5-18C2D965B5EC}.Debug|x64.Build.0 = Debug|Any CPU + {D5F03D6D-B233-4716-93B5-18C2D965B5EC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D5F03D6D-B233-4716-93B5-18C2D965B5EC}.Release|Any CPU.Build.0 = Release|Any CPU + {D5F03D6D-B233-4716-93B5-18C2D965B5EC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {D5F03D6D-B233-4716-93B5-18C2D965B5EC}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {D5F03D6D-B233-4716-93B5-18C2D965B5EC}.Release|Win32.ActiveCfg = Release|Any CPU + {D5F03D6D-B233-4716-93B5-18C2D965B5EC}.Release|Win32.Build.0 = Release|Any CPU + {D5F03D6D-B233-4716-93B5-18C2D965B5EC}.Release|x64.ActiveCfg = Release|Any CPU + {D5F03D6D-B233-4716-93B5-18C2D965B5EC}.Release|x64.Build.0 = Release|Any CPU + {D5F03D6D-B233-4716-93B5-18C2D965B5EC}.ReleaseNoNet|Any CPU.ActiveCfg = Release|Any CPU + {D5F03D6D-B233-4716-93B5-18C2D965B5EC}.ReleaseNoNet|Any CPU.Build.0 = Release|Any CPU + {D5F03D6D-B233-4716-93B5-18C2D965B5EC}.ReleaseNoNet|Mixed Platforms.ActiveCfg = Release|Any CPU + {D5F03D6D-B233-4716-93B5-18C2D965B5EC}.ReleaseNoNet|Mixed Platforms.Build.0 = Release|Any CPU + {D5F03D6D-B233-4716-93B5-18C2D965B5EC}.ReleaseNoNet|Win32.ActiveCfg = Release|Any CPU + {D5F03D6D-B233-4716-93B5-18C2D965B5EC}.ReleaseNoNet|Win32.Build.0 = Release|Any CPU + {D5F03D6D-B233-4716-93B5-18C2D965B5EC}.ReleaseNoNet|x64.ActiveCfg = Release|Any CPU + {D5F03D6D-B233-4716-93B5-18C2D965B5EC}.ReleaseNoNet|x64.Build.0 = Release|Any CPU + {F5A2A8F9-C084-498F-9603-9D927BA5C626}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F5A2A8F9-C084-498F-9603-9D927BA5C626}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F5A2A8F9-C084-498F-9603-9D927BA5C626}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {F5A2A8F9-C084-498F-9603-9D927BA5C626}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {F5A2A8F9-C084-498F-9603-9D927BA5C626}.Debug|Win32.ActiveCfg = Debug|Any CPU + {F5A2A8F9-C084-498F-9603-9D927BA5C626}.Debug|Win32.Build.0 = Debug|Any CPU + {F5A2A8F9-C084-498F-9603-9D927BA5C626}.Debug|x64.ActiveCfg = Debug|Any CPU + {F5A2A8F9-C084-498F-9603-9D927BA5C626}.Debug|x64.Build.0 = Debug|Any CPU + {F5A2A8F9-C084-498F-9603-9D927BA5C626}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F5A2A8F9-C084-498F-9603-9D927BA5C626}.Release|Any CPU.Build.0 = Release|Any CPU + {F5A2A8F9-C084-498F-9603-9D927BA5C626}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {F5A2A8F9-C084-498F-9603-9D927BA5C626}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {F5A2A8F9-C084-498F-9603-9D927BA5C626}.Release|Win32.ActiveCfg = Release|Any CPU + {F5A2A8F9-C084-498F-9603-9D927BA5C626}.Release|Win32.Build.0 = Release|Any CPU + {F5A2A8F9-C084-498F-9603-9D927BA5C626}.Release|x64.ActiveCfg = Release|Any CPU + {F5A2A8F9-C084-498F-9603-9D927BA5C626}.Release|x64.Build.0 = Release|Any CPU + {F5A2A8F9-C084-498F-9603-9D927BA5C626}.ReleaseNoNet|Any CPU.ActiveCfg = Release|Any CPU + {F5A2A8F9-C084-498F-9603-9D927BA5C626}.ReleaseNoNet|Any CPU.Build.0 = Release|Any CPU + {F5A2A8F9-C084-498F-9603-9D927BA5C626}.ReleaseNoNet|Mixed Platforms.ActiveCfg = Release|Any CPU + {F5A2A8F9-C084-498F-9603-9D927BA5C626}.ReleaseNoNet|Mixed Platforms.Build.0 = Release|Any CPU + {F5A2A8F9-C084-498F-9603-9D927BA5C626}.ReleaseNoNet|Win32.ActiveCfg = Release|Any CPU + {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 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/KeePassLib2Android/.gitignore b/src/KeePassLib2Android/.gitignore deleted file mode 100644 index 2416a678e..000000000 --- a/src/KeePassLib2Android/.gitignore +++ /dev/null @@ -1 +0,0 @@ -obj/ diff --git a/src/KeePassLib2Android/KeePassLib2Android.csproj b/src/KeePassLib2Android/KeePassLib2Android.csproj index 849a5cf5f..ad11f66bf 100644 --- a/src/KeePassLib2Android/KeePassLib2Android.csproj +++ b/src/KeePassLib2Android/KeePassLib2Android.csproj @@ -1,183 +1,28 @@ - - + - Debug - AnyCPU - {545B4A6B-8BBA-4FBE-92FC-4AC060122A54} - {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - KeePassLib2Android - Resources - Assets - Resources\Resource.designer.cs - Resource - KeePassLib2Android - v8.0 - false - 8482b288 - - - True - full - False - bin\Debug - DEBUG;EXCLUDE_TWOFISH;_EXCLUDE_KEYBOARD;_EXCLUDE_FILECHOOSER;_EXCLUDE_JAVAFILESTORAGE;INCLUDE_KEYTRANSFORM - prompt - 4 - False - None - - - none - True - bin\Release - prompt - 4 - False - False - - - none - True - bin\ReleaseNoNet - prompt - 4 - False - False + net8.0-android + 21 + enable + enable - - ..\ProtoBuf\protobuf-net.dll - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Component - - - - - - - - - - - - - - - - - - - - - - - - - + - - - + - + + Designer + MSBuild:UpdateGeneratedFiles + - - {70D3844A-D9FA-4A64-B205-A84C6A822196} - KP2AKdbLibraryBinding - + + Component + - \ No newline at end of file diff --git a/src/KeePassLib2Android/Kp2aLog.cs b/src/KeePassLib2Android/Kp2aLog.cs index 2226ee875..93106e13f 100644 --- a/src/KeePassLib2Android/Kp2aLog.cs +++ b/src/KeePassLib2Android/Kp2aLog.cs @@ -108,8 +108,12 @@ public static void FinishLogFile() public static void SendLog(Context ctx) { - if (!File.Exists(LogFilename)) - return; + if (!File.Exists(LogFilename)) + { + Toast.MakeText(ctx, "Debug log is empty.", ToastLength.Long).Show(); + return; + } + Intent sendIntent = new Intent(); sendIntent.SetAction(Intent.ActionSend); sendIntent.PutExtra(Intent.ExtraText, File.ReadAllText(LogFilename)); diff --git a/src/KeePassLib2Android/Native/NativeMethods.Unix.cs b/src/KeePassLib2Android/Native/NativeMethods.Unix.cs deleted file mode 100644 index 3e0ef0c04..000000000 --- a/src/KeePassLib2Android/Native/NativeMethods.Unix.cs +++ /dev/null @@ -1,115 +0,0 @@ -/* - KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Reflection; -using System.Runtime.InteropServices; -using System.Text; - -#if !KeePassUAP -using System.Windows.Forms; -#endif - -namespace KeePassLib.Native -{ - internal static partial class NativeMethods - { -#if (!KeePassLibSD && !KeePassUAP) - [StructLayout(LayoutKind.Sequential)] - private struct XClassHint - { - public IntPtr res_name; - public IntPtr res_class; - } - - [DllImport("libX11")] - private static extern int XSetClassHint(IntPtr display, IntPtr window, IntPtr class_hints); - - private static Type m_tXplatUIX11 = null; - private static Type GetXplatUIX11Type(bool bThrowOnError) - { - if(m_tXplatUIX11 == null) - { - // CheckState is in System.Windows.Forms - string strTypeCS = typeof(CheckState).AssemblyQualifiedName; - string strTypeX11 = strTypeCS.Replace("CheckState", "XplatUIX11"); - m_tXplatUIX11 = Type.GetType(strTypeX11, bThrowOnError, true); - } - - return m_tXplatUIX11; - } - - private static Type m_tHwnd = null; - private static Type GetHwndType(bool bThrowOnError) - { - if(m_tHwnd == null) - { - // CheckState is in System.Windows.Forms - string strTypeCS = typeof(CheckState).AssemblyQualifiedName; - string strTypeHwnd = strTypeCS.Replace("CheckState", "Hwnd"); - m_tHwnd = Type.GetType(strTypeHwnd, bThrowOnError, true); - } - - return m_tHwnd; - } - - internal static void SetWmClass(Form f, string strName, string strClass) - { - if(f == null) { Debug.Assert(false); return; } - - // The following crashes under Mac OS X (SIGSEGV in native code, - // not just an exception), thus skip it when we're on Mac OS X; - // https://sourceforge.net/projects/keepass/forums/forum/329221/topic/5860588 - if(NativeLib.GetPlatformID() == PlatformID.MacOSX) return; - - try - { - Type tXplatUIX11 = GetXplatUIX11Type(true); - FieldInfo fiDisplayHandle = tXplatUIX11.GetField("DisplayHandle", - BindingFlags.NonPublic | BindingFlags.Static); - IntPtr hDisplay = (IntPtr)fiDisplayHandle.GetValue(null); - - Type tHwnd = GetHwndType(true); - MethodInfo miObjectFromHandle = tHwnd.GetMethod("ObjectFromHandle", - BindingFlags.Public | BindingFlags.Static); - object oHwnd = miObjectFromHandle.Invoke(null, new object[] { f.Handle }); - - FieldInfo fiWholeWindow = tHwnd.GetField("whole_window", - BindingFlags.NonPublic | BindingFlags.Instance); - IntPtr hWindow = (IntPtr)fiWholeWindow.GetValue(oHwnd); - - XClassHint xch = new XClassHint(); - xch.res_name = Marshal.StringToCoTaskMemAnsi(strName ?? string.Empty); - xch.res_class = Marshal.StringToCoTaskMemAnsi(strClass ?? string.Empty); - IntPtr pXch = Marshal.AllocCoTaskMem(Marshal.SizeOf(xch)); - Marshal.StructureToPtr(xch, pXch, false); - - XSetClassHint(hDisplay, hWindow, pXch); - - Marshal.FreeCoTaskMem(pXch); - Marshal.FreeCoTaskMem(xch.res_name); - Marshal.FreeCoTaskMem(xch.res_class); - } - catch(Exception) { Debug.Assert(false); } - } -#endif - } -} diff --git a/src/KeePassLib2Android/Properties/AssemblyInfo.cs b/src/KeePassLib2Android/Properties/AssemblyInfo.cs deleted file mode 100644 index 6b1bdc1db..000000000 --- a/src/KeePassLib2Android/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,42 +0,0 @@ -/* - KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General assembly properties -[assembly: AssemblyTitle("KeePassLib")] -[assembly: AssemblyDescription("KeePass Password Management Library")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Dominik Reichl")] -[assembly: AssemblyProduct("KeePassLib")] -[assembly: AssemblyCopyright("Copyright © 2003-2017 Dominik Reichl")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// COM settings -[assembly: ComVisible(false)] - -// Assembly GUID -[assembly: Guid("395f6eec-a1e0-4438-aa82-b75099348134")] - -// Assembly version information -[assembly: AssemblyVersion("2.35.0.*")] -[assembly: AssemblyFileVersion("2.35.0.0")] diff --git a/src/KeePassLib2Android/Serialization/KdbxFile.Read.cs b/src/KeePassLib2Android/Serialization/KdbxFile.Read.cs index b2fe6df26..930b3eafe 100644 --- a/src/KeePassLib2Android/Serialization/KdbxFile.Read.cs +++ b/src/KeePassLib2Android/Serialization/KdbxFile.Read.cs @@ -107,7 +107,7 @@ public void Load(Stream sSource, KdbxFormat fmt, IStatusLogger slLogger) try { Stream sXml; - if (fmt == KdbxFormat.Default || fmt == KdbxFormat.ProtocolBuffers) + if (fmt == KdbxFormat.Default) { BinaryReaderEx br = new BinaryReaderEx(sHashing, encNoBom, KLRes.FileCorrupted); @@ -229,10 +229,7 @@ public void Load(Stream sSource, KdbxFormat fmt, IStatusLogger slLogger) if (fmt == KdbxFormat.ProtocolBuffers) { - KdbpFile.ReadDocument(m_pwDatabase, sXml, m_pbInnerRandomStreamKey, m_pbHashOfHeader); - - Kp2aLog.Log(String.Format("KdbpFile.ReadDocument: {0}ms", stopWatch.ElapsedMilliseconds)); - + throw new Exception("kdbp is deprecated and was removed to simplify the build process."); } else { diff --git a/src/KeePassLib2Android/Serialization/KdbxFile.Write.cs b/src/KeePassLib2Android/Serialization/KdbxFile.Write.cs index 232b06e0c..077831fd5 100644 --- a/src/KeePassLib2Android/Serialization/KdbxFile.Write.cs +++ b/src/KeePassLib2Android/Serialization/KdbxFile.Write.cs @@ -210,35 +210,29 @@ public void Save(Stream sSaveTo, PwGroup pgDataSource, KdbxFormat fmt, var stopWatch = Stopwatch.StartNew(); - if (m_format == KdbxFormat.ProtocolBuffers) - { - KdbpFile.WriteDocument(m_pwDatabase, sXml, m_pbInnerRandomStreamKey, m_pbHashOfHeader); - } - else - { #if KeePassUAP - XmlWriterSettings xws = new XmlWriterSettings(); - xws.Encoding = encNoBom; - xws.Indent = true; - xws.IndentChars = "\t"; - xws.NewLineOnAttributes = false; + XmlWriterSettings xws = new XmlWriterSettings(); + xws.Encoding = encNoBom; + xws.Indent = true; + xws.IndentChars = "\t"; + xws.NewLineOnAttributes = false; - XmlWriter xw = XmlWriter.Create(sXml, xws); + XmlWriter xw = XmlWriter.Create(sXml, xws); #else - XmlTextWriter xw = new XmlTextWriter(sXml, encNoBom); + XmlTextWriter xw = new XmlTextWriter(sXml, encNoBom); - xw.Formatting = Formatting.Indented; - xw.IndentChar = '\t'; - xw.Indentation = 1; + xw.Formatting = Formatting.Indented; + xw.IndentChar = '\t'; + xw.Indentation = 1; #endif - m_xmlWriter = xw; + m_xmlWriter = xw; WriteDocument(pgRoot); - m_xmlWriter.Flush(); - m_xmlWriter.Close(); - } + m_xmlWriter.Flush(); + m_xmlWriter.Close(); + Kp2aLog.Log(String.Format("{1}: {0}ms", stopWatch.ElapsedMilliseconds, m_format == KdbxFormat.ProtocolBuffers ? "KdbpFile.WriteDocument" : "Xml WriteDocument")); } diff --git a/src/KeePassLib2Android/Serialization/KdbxFile.cs b/src/KeePassLib2Android/Serialization/KdbxFile.cs index 2fff60c51..ab762af86 100644 --- a/src/KeePassLib2Android/Serialization/KdbxFile.cs +++ b/src/KeePassLib2Android/Serialization/KdbxFile.cs @@ -59,6 +59,8 @@ public enum KdbxFormat /// Use this flag when exporting data to a plain-text XML file. /// PlainXml, + + //Deprecated ProtocolBuffers } diff --git a/src/KeePassLib2Android/Serialization/ProtoBuf/KdbpFile.cs b/src/KeePassLib2Android/Serialization/ProtoBuf/KdbpFile.cs deleted file mode 100644 index c5b5f669d..000000000 --- a/src/KeePassLib2Android/Serialization/ProtoBuf/KdbpFile.cs +++ /dev/null @@ -1,1444 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using KeePassLib.Collections; -using KeePassLib.Cryptography; -using KeePassLib.Security; -using KeePassLib.Utility; -using ProtoBuf; -using ProtoBuf.Meta; - -namespace KeePassLib.Serialization -{ - public class KdbpFile - { - public const string FileNameExtension = "kdbp"; - - /// - /// Precompiles the serializer classes for faster first-run execution - /// - public static void PrepareSerializer() - { - RuntimeTypeModel.Default[typeof(PwDatabaseBuffer)].CompileInPlace(); - } - - /// - /// Determines whether the database pointed to by the specified ioc should be (de)serialised in default (xml) or protocol buffers format. - /// - public static KdbxFormat GetFormatToUse(string fileExt) - { - return fileExt.Equals(KdbpFile.FileNameExtension, StringComparison.OrdinalIgnoreCase) ? KdbxFormat.ProtocolBuffers : - (fileExt.Equals("xml", StringComparison.OrdinalIgnoreCase) ? KdbxFormat.PlainXml : KdbxFormat.Default); - } - - public static void WriteDocument(PwDatabase database, Stream stream, byte[] protectedStreamKey, byte[] hashOfHeader) - { - var context = new SerializationContext - { - Context = new BufferContext(database, - new CryptoRandomStream(CrsAlgorithm.Salsa20, protectedStreamKey), hashOfHeader) - }; - - RuntimeTypeModel.Default.Serialize(stream, new PwDatabaseBuffer(database), context); - } - - public static void ReadDocument(PwDatabase database, Stream stream, byte[] protectedStreamKey, byte[] expectedHashOfHeader) - { - - var context = new BufferContext(database, new CryptoRandomStream(CrsAlgorithm.Salsa20, protectedStreamKey)); - - // Deserialisation will occur into the database already in context. - RuntimeTypeModel.Default.Deserialize(stream, null, typeof(PwDatabaseBuffer), new SerializationContext { Context = context }); - - if (expectedHashOfHeader.Length > 0 && - !KeePassLib.Utility.MemUtil.ArraysEqual(context.HeaderHash, expectedHashOfHeader)) - { - throw new IOException(KeePassLib.Resources.KLRes.FileCorrupted); - } - } - - private class BufferContext - { - // ProtectedBinary objects may be referred to multipe times by entry histories, so reference them only once by ensuring a 1:1 mapping to the buffer wrapping them. - public readonly Dictionary BinaryPool = new Dictionary(); - - public readonly PwDatabase Database; - public readonly CryptoRandomStream RandomStream; - public byte[] HeaderHash; - - public BufferContext(PwDatabase database, CryptoRandomStream randomStream, byte[] pbHashOfHeader = null) - { - Database = database; - RandomStream = randomStream; - HeaderHash = pbHashOfHeader; - } - } - - [ProtoContract] - private class PwDatabaseBuffer - { - #region Serialization - - private PwDatabase mDatabase; - private PwDeletedObjectListBuffer mDeletedObjects; - private PwCustomIconListBuffer mCustomIcons; - - public PwDatabaseBuffer(PwDatabase database) - { - mDatabase = database; - mDeletedObjects = new PwDeletedObjectListBuffer(mDatabase.DeletedObjects); - mCustomIcons = new PwCustomIconListBuffer(mDatabase.CustomIcons); - } - - [ProtoBeforeSerialization] - private void BeforeSerialization(SerializationContext context) - { - var bufferContext = (BufferContext)context.Context; - - System.Diagnostics.Debug.Assert(mDatabase == bufferContext.Database); - - HeaderHash = bufferContext.HeaderHash; - } - #endregion - - #region Deserialization - public PwDatabaseBuffer() - { - } - - [ProtoBeforeDeserialization] - private void BeforeDeserialization(SerializationContext context) - { - var bufferContext = (BufferContext)context.Context; - - mDatabase = bufferContext.Database; - mDeletedObjects = new PwDeletedObjectListBuffer(mDatabase.DeletedObjects); - mCustomIcons = new PwCustomIconListBuffer(mDatabase.CustomIcons); - } - - [ProtoAfterDeserialization] - private void AfterDeserialization(SerializationContext context) - { - var bufferContext = (BufferContext)context.Context; - - bufferContext.HeaderHash = HeaderHash; - } - #endregion - - [ProtoMember(1)] - public string Generator - { - get { return PwDatabase.LocalizedAppName; } - set { /* Ignore */ } - } - - [ProtoMember(2, OverwriteList = true)] - public byte[] HeaderHash; - - [ProtoMember(3)] - public string Name - { - get { return mDatabase.Name; } - set { mDatabase.Name = value; } - } - - [ProtoMember(4)] - public DateTime NameChanged - { - get { return mDatabase.NameChanged.ToUniversalTime(); } - set { mDatabase.NameChanged = value.ToLocalTime(); } - } - - [ProtoMember(5)] - public string Description - { - get { return mDatabase.Description; } - set { mDatabase.Description = value; } - } - - [ProtoMember(6)] - public DateTime DescriptionChanged - { - get { return mDatabase.DescriptionChanged.ToUniversalTime(); } - set { mDatabase.DescriptionChanged = value.ToLocalTime(); } - } - - [ProtoMember(7)] - public string DefaultUserName - { - get { return mDatabase.DefaultUserName; } - set { mDatabase.DefaultUserName = value; } - } - - [ProtoMember(8)] - public DateTime DefaultUserNameChanged - { - get { return mDatabase.DefaultUserNameChanged.ToUniversalTime(); } - set { mDatabase.DefaultUserNameChanged = value.ToLocalTime(); } - } - - [ProtoMember(9)] - public uint MaintenanceHistoryDays - { - get { return mDatabase.MaintenanceHistoryDays; } - set { mDatabase.MaintenanceHistoryDays = value; } - } - - [ProtoMember(10)] - public int Color - { - get { return mDatabase.Color.ToArgb(); } - set { mDatabase.Color = System.Drawing.Color.FromArgb(value); } - } - - [ProtoMember(11)] - public DateTime MasterKeyChanged - { - get { return mDatabase.MasterKeyChanged.ToUniversalTime(); } - set { mDatabase.MasterKeyChanged = value.ToLocalTime(); } - } - - [ProtoMember(12)] - public long MasterKeyChangeRec - { - get { return mDatabase.MasterKeyChangeRec; } - set { mDatabase.MasterKeyChangeRec = value; } - } - - [ProtoMember(13)] - public long MasterKeyChangeForce - { - get { return mDatabase.MasterKeyChangeForce; } - set { mDatabase.MasterKeyChangeForce = value; } - } - - [ProtoMember(14)] - public MemoryProtectionConfigBuffer MemoryProtection - { - get { return new MemoryProtectionConfigBuffer(mDatabase.MemoryProtection); } - set { mDatabase.MemoryProtection = value.MemoryProtectionConfig; } - } - - [ProtoMember(15)] - public PwCustomIconListBuffer CustomIcons - { - get { return mCustomIcons; } - } - - [ProtoMember(16)] - public bool RecycleBinEnabled - { - get { return mDatabase.RecycleBinEnabled; } - set { mDatabase.RecycleBinEnabled = value; } - } - - [ProtoMember(17, OverwriteList = true)] - public byte[] RecycleBinUuid - { - get { return mDatabase.RecycleBinUuid.UuidBytes; } - set { mDatabase.RecycleBinUuid = new PwUuid(value); } - } - - [ProtoMember(18)] - public DateTime RecycleBinChanged - { - get { return mDatabase.RecycleBinChanged.ToUniversalTime(); } - set { mDatabase.RecycleBinChanged = value.ToLocalTime(); } - } - - [ProtoMember(19, OverwriteList = true)] - public byte[] EntryTemplatesGroup - { - get { return mDatabase.EntryTemplatesGroup.UuidBytes; } - set { mDatabase.EntryTemplatesGroup = new PwUuid(value); } - } - - [ProtoMember(20)] - public DateTime EntryTemplatesGroupChanged - { - get { return mDatabase.EntryTemplatesGroupChanged.ToUniversalTime(); } - set { mDatabase.EntryTemplatesGroupChanged = value.ToLocalTime(); } - } - - [ProtoMember(21)] - public int HistoryMaxItems - { - get { return mDatabase.HistoryMaxItems; } - set { mDatabase.HistoryMaxItems = value; } - } - - [ProtoMember(22)] - public long HistoryMaxSize - { - get { return mDatabase.HistoryMaxSize; } - set { mDatabase.HistoryMaxSize = value; } - } - - [ProtoMember(23, OverwriteList = true)] - public byte[] LastSelectedGroup - { - get { return mDatabase.LastSelectedGroup.UuidBytes; } - set { mDatabase.LastSelectedGroup = new PwUuid(value); } - } - - [ProtoMember(24, OverwriteList = true)] - public byte[] LastTopVisibleGroup - { - get { return mDatabase.LastTopVisibleGroup.UuidBytes; } - set { mDatabase.LastTopVisibleGroup = new PwUuid(value); } - } - - [ProtoMember(25)] - public StringDictionaryExBuffer CustomData - { - get { return new StringDictionaryExBuffer(mDatabase.CustomData); } - set { mDatabase.CustomData = value.StringDictionaryEx; } - } - - [ProtoMember(27)] - public PwGroupBuffer RootGroup - { - get { return new PwGroupBuffer(mDatabase.RootGroup); } - set { mDatabase.RootGroup = value.Group; } - } - - [ProtoMember(28)] - public PwDeletedObjectListBuffer DeletedObjects - { - get { return mDeletedObjects; } - } - } - - [ProtoContract] - private class StringDictionaryExBuffer : IEnumerable> - { - #region Serialization - private StringDictionaryEx mStringDictionaryEx; - - public StringDictionaryExBuffer(StringDictionaryEx stringDictionaryEx) - { - mStringDictionaryEx = stringDictionaryEx; - } - #endregion - - #region Deserialization - public StringDictionaryExBuffer() - { - mStringDictionaryEx = new StringDictionaryEx(); - } - - public StringDictionaryEx StringDictionaryEx { get { return mStringDictionaryEx; } } - - public void Add(KeyValuePair kvp) - { - mStringDictionaryEx.Set(kvp.Key, kvp.Value); - } - #endregion - - public IEnumerator> GetEnumerator() - { - return mStringDictionaryEx.GetEnumerator(); - } - - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - } - - [ProtoContract] - private class PwCustomIconListBuffer : IEnumerable - { - private List mCustomIcons; - #region Serialization - public PwCustomIconListBuffer(List customIcons) - { - mCustomIcons = customIcons; - } - #endregion - - #region Deserialization - public void Add(PwCustomIconBuffer item) - { - mCustomIcons.Add(item.CustomIcon); - } - #endregion - - public IEnumerator GetEnumerator() - { - foreach (var customIcon in mCustomIcons) - { - yield return new PwCustomIconBuffer(customIcon); - } - } - - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - } - - [ProtoContract] - private class PwCustomIconBuffer - { - #region Serialization - private PwCustomIcon mCustomIcon; - public PwCustomIconBuffer(PwCustomIcon CustomIcon) - { - mCustomIcon = CustomIcon; - Uuid = mCustomIcon.Uuid.UuidBytes; - ImageData = mCustomIcon.ImageDataPng; - } - #endregion - - #region Deserialization - public PwCustomIconBuffer() - { - } - - [ProtoAfterDeserialization] - private void AfterDeserialization(SerializationContext context) - { - mCustomIcon = new PwCustomIcon(new PwUuid(Uuid), ImageData); - } - - public PwCustomIcon CustomIcon { get { return mCustomIcon; } } - #endregion - - [ProtoMember(1, OverwriteList = true)] - public byte[] Uuid; - - [ProtoMember(2, OverwriteList = true)] - public byte[] ImageData; - } - - [ProtoContract] - private class MemoryProtectionConfigBuffer - { - #region Serialization - private readonly MemoryProtectionConfig mMemoryProtectionConfig; - - public MemoryProtectionConfigBuffer(MemoryProtectionConfig memoryProtectionConfig) - { - mMemoryProtectionConfig = memoryProtectionConfig; - } - #endregion - - #region Deserialization - public MemoryProtectionConfigBuffer() - { - mMemoryProtectionConfig = new MemoryProtectionConfig(); - } - - public MemoryProtectionConfig MemoryProtectionConfig { get { return mMemoryProtectionConfig; } } - #endregion - - [ProtoMember(1)] - public bool ProtectTitle - { - get { return mMemoryProtectionConfig.ProtectTitle; } - set { mMemoryProtectionConfig.ProtectTitle = value; } - } - - [ProtoMember(2)] - public bool ProtectUserName - { - get { return mMemoryProtectionConfig.ProtectUserName; } - set { mMemoryProtectionConfig.ProtectUserName = value; } - } - - [ProtoMember(3)] - public bool ProtectPassword - { - get { return mMemoryProtectionConfig.ProtectPassword; } - set { mMemoryProtectionConfig.ProtectPassword = value; } - } - - [ProtoMember(4)] - public bool ProtectUrl - { - get { return mMemoryProtectionConfig.ProtectUrl; } - set { mMemoryProtectionConfig.ProtectUrl = value; } - } - - [ProtoMember(5)] - public bool ProtectNotes - { - get { return mMemoryProtectionConfig.ProtectNotes; } - set { mMemoryProtectionConfig.ProtectNotes = value; } - } - } - - [ProtoContract] - private class PwDeletedObjectListBuffer : PwObjectListBufferBase - { - #region Serialization - public PwDeletedObjectListBuffer(PwObjectList objectList) - : base(objectList) - { - } - - protected override PwDeletedObjectBuffer CreateBuffer(PwDeletedObject item) - { - return new PwDeletedObjectBuffer(item); - } - #endregion - - #region Deserialization - public PwDeletedObjectListBuffer() - : base() - { - } - - public override void Add(PwDeletedObjectBuffer item) - { - ObjectList.Add(item.DeletedObject); - } - #endregion - } - - [ProtoContract] - private class PwDeletedObjectBuffer - { - #region Serialization - private readonly PwDeletedObject mDeletedObject; - - public PwDeletedObjectBuffer(PwDeletedObject deletedObject) - { - mDeletedObject = deletedObject; - } - #endregion - - #region Deserialization - public PwDeletedObjectBuffer() - { - mDeletedObject = new PwDeletedObject(); - } - - public PwDeletedObject DeletedObject { get { return mDeletedObject; } } - #endregion - - [ProtoMember(1, OverwriteList = true)] - public byte[] Uuid - { - get { return mDeletedObject.Uuid.UuidBytes; } - set { mDeletedObject.Uuid = new PwUuid(value); } - } - - [ProtoMember(2)] - public DateTime DeletionTime - { - get { return mDeletedObject.DeletionTime.ToUniversalTime(); } - set { mDeletedObject.DeletionTime = value.ToLocalTime(); } - } - } - - [ProtoContract] - private class PwGroupBuffer - { - #region Serialization - private readonly PwGroup mGroup; - private readonly PwGroupEntryListBuffer mEntries; - private readonly PwGroupGroupListBuffer mGroups; - - public PwGroupBuffer(PwGroup group) - { - mGroup = group; - mEntries = new PwGroupEntryListBuffer(mGroup); - mGroups = new PwGroupGroupListBuffer(mGroup); - } - #endregion - - #region Deserialization - public PwGroupBuffer() - { - mGroup = new PwGroup(false, false); - mEntries = new PwGroupEntryListBuffer(mGroup); - mGroups = new PwGroupGroupListBuffer(mGroup); - } - - public PwGroup Group { get { return mGroup; } } - #endregion - - [ProtoMember(1, OverwriteList = true)] - public byte[] Uuid - { - get { return mGroup.Uuid.UuidBytes; } - set { mGroup.Uuid = new PwUuid(value); } - } - - [ProtoMember(2)] - public string Name - { - get { return mGroup.Name; } - set { mGroup.Name = value; } - } - - [ProtoMember(3)] - public string Notes - { - get { return mGroup.Notes; } - set { mGroup.Notes = value; } - } - - [ProtoMember(4)] - public PwIcon IconId - { - get { return mGroup.IconId; } - set { mGroup.IconId = value; } - } - - [ProtoMember(5, OverwriteList = true)] - public byte[] CustomIconUuid - { - get { return mGroup.CustomIconUuid.Equals(PwUuid.Zero) ? null : mGroup.CustomIconUuid.UuidBytes; ; } - set { mGroup.CustomIconUuid = value == null ? PwUuid.Zero : new PwUuid(value); } - } - - [ProtoMember(6)] - public bool IsExpanded - { - get { return mGroup.IsExpanded; } - set { mGroup.IsExpanded = value; } - } - - [ProtoMember(7)] - public string DefaultAutoTypeSequence - { - get { return mGroup.DefaultAutoTypeSequence; } - set { mGroup.DefaultAutoTypeSequence = value; } - } - - [ProtoMember(8)] - public DateTime LastModificationTime - { - get { return mGroup.LastModificationTime.ToUniversalTime(); } - set { mGroup.LastModificationTime = value.ToLocalTime(); } - } - - [ProtoMember(9)] - public DateTime CreationTime - { - get { return mGroup.CreationTime.ToUniversalTime(); } - set { mGroup.CreationTime = value.ToLocalTime(); } - } - - [ProtoMember(10)] - public DateTime LastAccessTime - { - get { return mGroup.LastAccessTime.ToUniversalTime(); } - set { mGroup.LastAccessTime = value.ToLocalTime(); } - } - - [ProtoMember(11)] - public DateTime ExpiryTime - { - get { return mGroup.ExpiryTime.ToUniversalTime(); } - set { mGroup.ExpiryTime = value.ToLocalTime(); } - } - - [ProtoMember(12)] - public bool Expires - { - get { return mGroup.Expires; } - set { mGroup.Expires = value; } - } - - [ProtoMember(13)] - public ulong UsageCount - { - get { return mGroup.UsageCount; } - set { mGroup.UsageCount = value; } - } - - [ProtoMember(14)] - public DateTime LocationChanged - { - get { return mGroup.LocationChanged.ToUniversalTime(); } - set { mGroup.LocationChanged = value.ToLocalTime(); } - } - - [ProtoMember(15)] - public bool? EnableAutoType - { - get { return mGroup.EnableAutoType; } - set { mGroup.EnableAutoType = value; } - } - - [ProtoMember(16)] - public bool? EnableSearching - { - get { return mGroup.EnableSearching; } - set { mGroup.EnableSearching = value; } - } - - [ProtoMember(17, OverwriteList = true)] - public byte[] LastTopVisibleEntry - { - get { return mGroup.LastTopVisibleEntry.UuidBytes; } - set { mGroup.LastTopVisibleEntry = new PwUuid(value); } - } - - [ProtoMember(18)] - public PwGroupGroupListBuffer Groups - { - get { return mGroups; } - } - - [ProtoMember(19)] - public PwGroupEntryListBuffer Entries - { - get { return mEntries; } - } - } - - private abstract class PwObjectListBufferBase : IEnumerable - where TData : class, KeePassLib.Interfaces.IDeepCloneable - { - #region Serialization - private PwObjectList mObjectList; - - protected PwObjectListBufferBase(PwObjectList objectList) - { - mObjectList = objectList; - } - - protected abstract TDataBuffer CreateBuffer(TData item); - #endregion - - #region Deserialization - protected PwObjectListBufferBase() - { - mObjectList = new PwObjectList(); - } - - public PwObjectList ObjectList { get { return mObjectList; } } - - public abstract void Add(TDataBuffer item); - #endregion - - public IEnumerator GetEnumerator() - { - foreach (var item in mObjectList) - { - yield return CreateBuffer(item); - } - } - - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - } - - [ProtoContract] - private class PwGroupGroupListBuffer : PwObjectListBufferBase - { - #region Serialization - private PwGroup mGroup; - public PwGroupGroupListBuffer(PwGroup group) - : base(group.Groups) - { - mGroup = group; - } - - protected override PwGroupBuffer CreateBuffer(PwGroup item) - { - return new PwGroupBuffer(item); - } - #endregion - - #region Deserialization - public override void Add(PwGroupBuffer item) - { - mGroup.AddGroup(item.Group, true); - } - #endregion - } - - [ProtoContract] - private class PwGroupEntryListBuffer : PwObjectListBufferBase - { - #region Serialization - private PwGroup mGroup; - public PwGroupEntryListBuffer(PwGroup group) - : base(group.Entries) - { - mGroup = group; - } - - protected override PwEntryBuffer CreateBuffer(PwEntry item) - { - return new PwEntryBuffer(item); - } - #endregion - - #region Deserialization - public override void Add(PwEntryBuffer item) - { - mGroup.AddEntry(item.Entry, true); - } - #endregion - } - - [ProtoContract] - private class PwEntryListBuffer : PwObjectListBufferBase - { - #region Serialization - public PwEntryListBuffer(PwObjectList entryList) - : base(entryList) - { - } - - protected override PwEntryBuffer CreateBuffer(PwEntry item) - { - return new PwEntryBuffer(item); - } - #endregion - - #region Deserialization - public PwEntryListBuffer() - : base() - { - } - - public override void Add(PwEntryBuffer item) - { - ObjectList.Add(item.Entry); - } - #endregion - } - - [ProtoContract] - private class PwEntryBuffer - { - #region Serialization - private readonly PwEntry mEntry; - private ProtectedStandardFieldDictionaryBuffer mEntryStandardStrings; - private ProtectedCustomFieldDictionaryBuffer mEntryCustomStrings; - private NamedProtectedBinaryListBuffer mEntryBinaries; - - public PwEntryBuffer(PwEntry entry) - { - mEntry = entry; - } - - [ProtoBeforeSerialization] - private void BeforeSerialization(SerializationContext context) - { - var bufferContext = (BufferContext)context.Context; - - // ProtectedStringDictionaryBuffer nver gets its own ProtoBeforeSerialization called as it's a list of objects rather than an object itself - List> customFields; - mEntryStandardStrings = new ProtectedStandardFieldDictionaryBuffer(mEntry.Strings, (int)mEntry.Strings.UCount, bufferContext, out customFields); - mEntryCustomStrings = new ProtectedCustomFieldDictionaryBuffer(customFields); - mEntryBinaries = new NamedProtectedBinaryListBuffer(mEntry.Binaries, (int)mEntry.Binaries.UCount, bufferContext); - } - #endregion - - #region Deserialization - public PwEntryBuffer() - { - mEntry = new PwEntry(false, false); - mEntryStandardStrings = new ProtectedStandardFieldDictionaryBuffer(mEntry.Strings); - mEntryCustomStrings = new ProtectedCustomFieldDictionaryBuffer(mEntry.Strings); - mEntryBinaries = new NamedProtectedBinaryListBuffer(mEntry.Binaries); - } - - public PwEntry Entry { get { return mEntry; } } - #endregion - - [ProtoMember(1, OverwriteList = true)] - public byte[] Uuid - { - get { return mEntry.Uuid.UuidBytes; } - set { mEntry.SetUuid(new PwUuid(value), false); } - } - - [ProtoMember(2)] - public PwIcon IconId - { - get { return mEntry.IconId; } - set { mEntry.IconId = value; } - } - - [ProtoMember(3, OverwriteList = true)] - public byte[] CustomIconUuid - { - get { return mEntry.CustomIconUuid.Equals(PwUuid.Zero) ? null : mEntry.CustomIconUuid.UuidBytes; } - set { mEntry.CustomIconUuid = value == null ? PwUuid.Zero : new PwUuid(value); } - } - - [ProtoMember(4)] - public int ForegroundColor - { - get { return mEntry.ForegroundColor.ToArgb(); } - set { mEntry.ForegroundColor = Color.FromArgb(value); } - } - - [ProtoMember(5)] - public int BackgroundColor - { - get { return mEntry.BackgroundColor.ToArgb(); } - set { mEntry.BackgroundColor = Color.FromArgb(value); } - } - - [ProtoMember(6)] - public string OverrideUrl - { - get { return mEntry.OverrideUrl; } - set { mEntry.OverrideUrl = value; } - } - - [ProtoMember(7)] - public IList Tags - { - get { return mEntry.Tags; } - } - - [ProtoMember(8)] - public DateTime LastModificationTime - { - get { return mEntry.LastModificationTime.ToUniversalTime(); } - set { mEntry.LastModificationTime = value.ToLocalTime(); } - } - - [ProtoMember(9)] - public DateTime CreationTime - { - get { return mEntry.CreationTime.ToUniversalTime(); } - set { mEntry.CreationTime = value.ToLocalTime(); } - } - - [ProtoMember(10)] - public DateTime LastAccessTime - { - get { return mEntry.LastAccessTime.ToUniversalTime(); } - set { mEntry.LastAccessTime = value.ToLocalTime(); } - } - - [ProtoMember(11)] - public DateTime ExpiryTime - { - get { return mEntry.ExpiryTime.ToUniversalTime(); } - set { mEntry.ExpiryTime = value.ToLocalTime(); } - } - - [ProtoMember(12)] - public bool Expires - { - get { return mEntry.Expires; } - set { mEntry.Expires = value; } - } - - [ProtoMember(13)] - public ulong UsageCount - { - get { return mEntry.UsageCount; } - set { mEntry.UsageCount = value; } - } - - [ProtoMember(14)] - public DateTime LocationChanged - { - get { return mEntry.LocationChanged.ToUniversalTime(); } - set { mEntry.LocationChanged = value.ToLocalTime(); } - } - - [ProtoMember(15)] - public ProtectedStandardFieldDictionaryBuffer StandardStrings - { - get { return mEntryStandardStrings; } - } - - [ProtoMember(16)] - public ProtectedCustomFieldDictionaryBuffer CustomStrings - { - get { return mEntryCustomStrings; } - } - - [ProtoMember(17, AsReference = true)] - public NamedProtectedBinaryListBuffer Binaries - { - get { return mEntryBinaries; } - } - - [ProtoMember(18)] - public AutoTypeConfigBuffer AutoType - { - get { return new AutoTypeConfigBuffer(mEntry.AutoType); } - set { mEntry.AutoType = value.AutoTypeConfig; } - } - - [ProtoMember(19)] - public PwEntryListBuffer History - { - get { return new PwEntryListBuffer(mEntry.History); } - set { mEntry.History = value.ObjectList; } - } - - } - - private abstract class ProtectedStringDictionaryBuffer : IEnumerable> - { - #region Serialization - private List> mProtectedStringBuffers; - - /// - /// Serialisation constructor. Reads strings from dictionary, does not write to it - /// - protected ProtectedStringDictionaryBuffer(int capacity) - { - mProtectedStringBuffers = new List>(capacity); - } - - protected void AddStringField(TKey key, ProtectedString value, bool? overrideProtect) - { - mProtectedStringBuffers.Add(new KeyValuePair(key, new ProtectedStringBuffer(value, overrideProtect))); - } - - public IEnumerator> GetEnumerator() - { - return mProtectedStringBuffers.GetEnumerator(); - } - - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - #endregion - - #region Deserialization - private readonly ProtectedStringDictionary mDictionary; - - /// - /// Deerialisation constructor. Writes strings to dictionary, does read from it - /// - protected ProtectedStringDictionaryBuffer(ProtectedStringDictionary dictionary) - { - mDictionary = dictionary; - } - - public void Add(KeyValuePair item) - { - mDictionary.Set(GetFieldName(item.Key), item.Value.ProtectedString); - } - - protected abstract string GetFieldName(TKey key); - - #endregion - } - - [ProtoContract] - private class ProtectedCustomFieldDictionaryBuffer : ProtectedStringDictionaryBuffer - { - public ProtectedCustomFieldDictionaryBuffer(List> entryStrings) - : base(entryStrings.Count) - { - foreach (var kvp in entryStrings) - { - System.Diagnostics.Debug.Assert(!PwDefs.IsStandardField(kvp.Key)); - AddStringField(kvp.Key, kvp.Value, null); - } - } - - public ProtectedCustomFieldDictionaryBuffer(ProtectedStringDictionary dictionary) - : base(dictionary) - { } - - protected override string GetFieldName(string key) - { - return key; - } - } - - [ProtoContract] - private class ProtectedStandardFieldDictionaryBuffer : ProtectedStringDictionaryBuffer - { - public enum StandardField - { - Title, - UserName, - Password, - Url, - Notes - } - - public ProtectedStandardFieldDictionaryBuffer(IEnumerable> entryStrings, int entryStringCount, BufferContext context, - out List> customFields) // Perf optimisation - return the custom fields so we don't have to determine them again - : base(entryStringCount) - { - customFields = new List>(entryStringCount); - - var database = context.Database; - - foreach (var kvp in entryStrings) - { - var field = GetField(kvp.Key); - - if (field.HasValue) - { - // Logic from KdbxFile.Write - - bool? overrideProtect = null; - // Adjust memory protection setting (which might be different - // from the database default, e.g. due to an import which - // didn't specify the correct setting) - switch (field.Value) - { - case StandardField.Title: - overrideProtect = database.MemoryProtection.ProtectTitle; - break; - case StandardField.UserName: - overrideProtect = database.MemoryProtection.ProtectUserName; - break; - case StandardField.Password: - overrideProtect = database.MemoryProtection.ProtectPassword; - break; - case StandardField.Url: - overrideProtect = database.MemoryProtection.ProtectUrl; - break; - case StandardField.Notes: - overrideProtect = database.MemoryProtection.ProtectNotes; - break; - } - - AddStringField(field.Value, kvp.Value, overrideProtect); - } - else - { - customFields.Add(kvp); - } - } - } - - private static StandardField? GetField(string fieldName) - { - switch (fieldName) - { - case PwDefs.TitleField: - return StandardField.Title; - case PwDefs.UserNameField: - return StandardField.UserName; - case PwDefs.PasswordField: - return StandardField.Password; - case PwDefs.UrlField: - return StandardField.Url; - case PwDefs.NotesField: - return StandardField.Notes; - - default: - System.Diagnostics.Debug.Assert(!PwDefs.IsStandardField(fieldName)); - return null; - } - } - - public ProtectedStandardFieldDictionaryBuffer(ProtectedStringDictionary dictionary) - : base(dictionary) - { } - - protected override string GetFieldName(StandardField key) - { - switch (key) - { - case StandardField.Title: - return PwDefs.TitleField; - case StandardField.UserName: - return PwDefs.UserNameField; - case StandardField.Password: - return PwDefs.PasswordField; - case StandardField.Url: - return PwDefs.UrlField; - case StandardField.Notes: - return PwDefs.NotesField; - default: - throw new ArgumentOutOfRangeException(); - } - } - } - - [ProtoContract] - private class ProtectedStringBuffer - { - #region Serialisation - private ProtectedString mProtectedString; - - public ProtectedStringBuffer(ProtectedString protectedString, bool? overrideProtect) - { - mProtectedString = protectedString; - IsProtected = overrideProtect.GetValueOrDefault(mProtectedString.IsProtected); - } - - [ProtoBeforeSerialization] - private void BeforeSerialization(SerializationContext context) - { - if (IsProtected) - { - Value = mProtectedString.ReadXorredString(((BufferContext)context.Context).RandomStream); - } - else - { - Value = mProtectedString.ReadUtf8(); - } - } - #endregion - - #region Deserialisation - public ProtectedStringBuffer() - { - } - - [ProtoAfterDeserialization] - private void AfterDeserialization(SerializationContext context) - { - if (IsProtected) - { - byte[] pbPad = ((BufferContext)context.Context).RandomStream.GetRandomBytes((uint)Value.Length); - mProtectedString = new ProtectedString(IsProtected, new XorredBuffer(Value, pbPad)); - } - else - { - mProtectedString = new ProtectedString(IsProtected, Value); - } - } - - public ProtectedString ProtectedString { get { return mProtectedString; } } - - #endregion - - [ProtoMember(1)] - public bool IsProtected; - - [ProtoMember(2, OverwriteList = true)] - public byte[] Value; - } - - [ProtoContract] - private class NamedProtectedBinaryListBuffer : IEnumerable - { - #region Serialisation - private readonly List mNamedBinaries; - - public NamedProtectedBinaryListBuffer(IEnumerable> binaries, int binariesCount, BufferContext context) - { - mNamedBinaries = new List(binariesCount); - foreach (var kvp in binaries) - { - NamedProtectedBinaryBuffer namedProtectedBinaryBuffer; - if (!context.BinaryPool.TryGetValue(kvp.Value, out namedProtectedBinaryBuffer)) - { - // Hasn't been put in the pool yet, so create it - namedProtectedBinaryBuffer = new NamedProtectedBinaryBuffer(kvp); - context.BinaryPool.Add(kvp.Value, namedProtectedBinaryBuffer); - } - mNamedBinaries.Add(namedProtectedBinaryBuffer); - } - } - - public IEnumerator GetEnumerator() - { - return mNamedBinaries.GetEnumerator(); - } - - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - #endregion - - #region Deserialization - private readonly ProtectedBinaryDictionary mBinaryDictionary; - - public NamedProtectedBinaryListBuffer(ProtectedBinaryDictionary binaryDictionary) - { - mBinaryDictionary = binaryDictionary; - } - - public void Add(NamedProtectedBinaryBuffer item) - { - mBinaryDictionary.Set(item.Name, item.ProtectedBinary); - } - #endregion - } - - [ProtoContract] - private class NamedProtectedBinaryBuffer - { - #region Serialization - private ProtectedBinary mProtectedBinary; - public NamedProtectedBinaryBuffer(KeyValuePair namedBinary) - { - Name = namedBinary.Key; - mProtectedBinary = namedBinary.Value; - IsProtected = mProtectedBinary.IsProtected; - } - - [ProtoBeforeSerialization] - private void BeforeSerialization(SerializationContext context) - { - if (IsProtected) - { - Value = mProtectedBinary.ReadXorredData(((BufferContext)context.Context).RandomStream); - } - else - { - Value = mProtectedBinary.ReadData(); - } - } - #endregion - - #region Deserialisation - public NamedProtectedBinaryBuffer() - { - } - - [ProtoAfterDeserialization] - private void AfterDeserialization(SerializationContext context) - { - if (IsProtected) - { - byte[] pbPad = ((BufferContext)context.Context).RandomStream.GetRandomBytes((uint)Value.Length); - mProtectedBinary = new ProtectedBinary(IsProtected, new XorredBuffer(Value, pbPad)); - } - else - { - mProtectedBinary = new ProtectedBinary(IsProtected, Value); - } - } - - public ProtectedBinary ProtectedBinary { get { return mProtectedBinary; } } - - #endregion - - [ProtoMember(1)] - public string Name; - - [ProtoMember(2)] - public bool IsProtected; - - [ProtoMember(3, OverwriteList = true)] - public byte[] Value; - } - - [ProtoContract] - private class AutoTypeConfigBuffer - { - private readonly AutoTypeAssociationsBuffer mAutoTypeAssociationsBuffer; - #region Serialization - private AutoTypeConfig mAutoTypeConfig; - public AutoTypeConfigBuffer(AutoTypeConfig autoTypeConfig) - { - mAutoTypeConfig = autoTypeConfig; - mAutoTypeAssociationsBuffer = new AutoTypeAssociationsBuffer(mAutoTypeConfig); - } - #endregion - - #region Deserialization - public AutoTypeConfigBuffer() - { - mAutoTypeConfig = new AutoTypeConfig(); - mAutoTypeAssociationsBuffer = new AutoTypeAssociationsBuffer(mAutoTypeConfig); - } - - public AutoTypeConfig AutoTypeConfig { get { return mAutoTypeConfig; } } - #endregion - - [ProtoMember(1)] - public bool Enabled - { - get { return mAutoTypeConfig.Enabled; } - set { mAutoTypeConfig.Enabled = value; } - } - - [ProtoMember(2)] - public AutoTypeObfuscationOptions ObfuscationOptions - { - get { return mAutoTypeConfig.ObfuscationOptions; } - set { mAutoTypeConfig.ObfuscationOptions = value; } - } - - [ProtoMember(3)] - public string DefaultSequence - { - get { return mAutoTypeConfig.DefaultSequence; } - set { mAutoTypeConfig.DefaultSequence = value; } - } - - [ProtoMember(4)] - public AutoTypeAssociationsBuffer Associations - { - get { return mAutoTypeAssociationsBuffer; } - } - } - - [ProtoContract] - private class AutoTypeAssociationsBuffer : IEnumerable - { - #region Serialization - private AutoTypeConfig mAutoTypeConfig; - - public AutoTypeAssociationsBuffer(AutoTypeConfig autoTypeConfig) - { - mAutoTypeConfig = autoTypeConfig; - } - - public IEnumerator GetEnumerator() - { - foreach (var autoTypeAssociation in mAutoTypeConfig.Associations) - { - yield return new AutoTypeAssociationBuffer(autoTypeAssociation); - } - } - - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - #endregion - - #region Deserialization - public void Add(AutoTypeAssociationBuffer value) - { - mAutoTypeConfig.Add(value.AutoTypeAssociation); - } - #endregion - } - - [ProtoContract] - private class AutoTypeAssociationBuffer - { - #region Serialization - private AutoTypeAssociation mAutoTypeAssociation; - - public AutoTypeAssociationBuffer(AutoTypeAssociation autoTypeAssociation) - { - mAutoTypeAssociation = autoTypeAssociation; - } - #endregion - - #region Deserialization - public AutoTypeAssociationBuffer() - { - mAutoTypeAssociation = new AutoTypeAssociation(); - } - - public AutoTypeAssociation AutoTypeAssociation { get { return mAutoTypeAssociation; } } - #endregion - - [ProtoMember(1)] - public string WindowName - { - get { return mAutoTypeAssociation.WindowName; } - set { mAutoTypeAssociation.WindowName = value; } - } - - [ProtoMember(2)] - public string Sequence - { - get { return mAutoTypeAssociation.Sequence; } - set { mAutoTypeAssociation.Sequence = value; } - } - } - } -} diff --git a/src/KeePassLib2Android/Translation/KPFormCustomization.cs b/src/KeePassLib2Android/Translation/KPFormCustomization.cs deleted file mode 100644 index f3ca86f7d..000000000 --- a/src/KeePassLib2Android/Translation/KPFormCustomization.cs +++ /dev/null @@ -1,108 +0,0 @@ -/* - KeePass Password Safe - The Open-Source Password Manager - Copyright (C) 2003-2017 Dominik Reichl - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Text; -using System.Xml.Serialization; - -#if !KeePassUAP -using System.Windows.Forms; -#endif - -namespace KeePassLib.Translation -{ - public sealed class KPFormCustomization - { - private string m_strFQName = string.Empty; - /// - /// The fully qualified name of the form. - /// - [XmlAttribute] - public string FullName - { - get { return m_strFQName; } - set - { - if(value == null) throw new ArgumentNullException("value"); - m_strFQName = value; - } - } - - private KPControlCustomization m_ccWindow = new KPControlCustomization(); - public KPControlCustomization Window - { - get { return m_ccWindow; } - set { m_ccWindow = value; } - } - - private List m_vControls = - new List(); - [XmlArray("ChildControls")] - [XmlArrayItem("Control")] - public List Controls - { - get { return m_vControls; } - set - { - if(value == null) throw new ArgumentNullException("value"); - - m_vControls = value; - } - } - -#if (!KeePassLibSD && !KeePassUAP) - private Form m_formEnglish = null; - [XmlIgnore] - public Form FormEnglish - { - get { return m_formEnglish; } - set { m_formEnglish = value; } - } - - public void ApplyTo(Form form) - { - Debug.Assert(form != null); if(form == null) throw new ArgumentNullException("form"); - - // Not supported by TrlUtil (preview form): - // Debug.Assert(form.GetType().FullName == m_strFQName); - - m_ccWindow.ApplyTo(form); - - if(m_vControls.Count == 0) return; - foreach(Control c in form.Controls) ApplyToControl(c); - } - - private void ApplyToControl(Control c) - { - foreach(KPControlCustomization cc in m_vControls) - { - if(c.Name == cc.Name) - { - cc.ApplyTo(c); - break; - } - } - - foreach(Control cSub in c.Controls) ApplyToControl(cSub); - } -#endif - } -} diff --git a/src/Kp2aAutofillParserTest/AutofillTest.cs b/src/Kp2aAutofillParser.Tests/AutofillTest.cs similarity index 86% rename from src/Kp2aAutofillParserTest/AutofillTest.cs rename to src/Kp2aAutofillParser.Tests/AutofillTest.cs index 2c9c2a7e8..eeefc2f1a 100644 --- a/src/Kp2aAutofillParserTest/AutofillTest.cs +++ b/src/Kp2aAutofillParser.Tests/AutofillTest.cs @@ -26,65 +26,64 @@ public override void FillFilledAutofillValue(FilledAutofillField filledField) [Fact] public void TestNotFocusedPasswordAutoIsNotFilled() { - var resourceName = "Kp2aAutofillParserTest.com-servicenet-mobile-no-focus.json"; + var resourceName = "com-servicenet-mobile-no-focus.json"; RunTestFromAutofillInput(resourceName, "com.servicenet.mobile"); } [Fact] public void TestCrashRegressionEmptySequence() { - var resourceName = "Kp2aAutofillParserTest.imdb.json"; + var resourceName = "imdb.json"; RunTestFromAutofillInput(resourceName, "com.vivaldi.browser", "m.imdb.com"); } [Fact] public void TestFocusedPasswordAutoIsFilled() { - var resourceName = "Kp2aAutofillParserTest.com-servicenet-mobile-focused.json"; + var resourceName = "com-servicenet-mobile-focused.json"; RunTestFromAutofillInput(resourceName, "com.servicenet.mobile"); } [Fact] public void TestMulitpleUnfocusedLoginsIsFilled() { - var resourceName = "Kp2aAutofillParserTest.firefox-amazon-it.json"; + var resourceName = "firefox-amazon-it.json"; RunTestFromAutofillInput(resourceName, "org.mozilla.firefox", "www.amazon.it"); } [Fact] public void CanDetectFieldsWithoutAutofillHints() { - var resourceName = "Kp2aAutofillParserTest.chrome-android10-amazon-it.json"; + var resourceName = "chrome-android10-amazon-it.json"; RunTestFromAutofillInput(resourceName, "com.android.chrome", "www.amazon.it"); } [Fact] public void DetectsUsernameFieldDespitePasswordAutoHint() { - var resourceName = "Kp2aAutofillParserTest.com-ifs-banking-fiid3364-android13.json"; + var resourceName = "com-ifs-banking-fiid3364-android13.json"; RunTestFromAutofillInput(resourceName, "com.ifs.banking.fiid3364", null); } [Fact] public void DetectsEmailAutofillHint() { - var resourceName = "Kp2aAutofillParserTest.com-expressvpn-vpn-android13.json"; + var resourceName = "com-expressvpn-vpn-android13.json"; RunTestFromAutofillInput(resourceName, "com.expressvpn.vpn", null); } [Fact] public void TestIgnoresAndroidSettings() { - var resourceName = "Kp2aAutofillParserTest.android14-settings.json"; + var resourceName = "android14-settings.json"; RunTestFromAutofillInput(resourceName, "com.android.settings", null); } private void RunTestFromAutofillInput(string resourceName, string expectedPackageName = null, string expectedWebDomain = null) { var assembly = Assembly.GetExecutingAssembly(); - string input; - using (Stream stream = assembly.GetManifestResourceStream(resourceName)) + using (Stream stream = assembly.GetManifestResourceStream(assembly.GetName().Name + "." + resourceName)) using (StreamReader reader = new StreamReader(stream)) { input = reader.ReadToEnd(); diff --git a/src/Kp2aAutofillParserTest/Kp2aAutofillParserTest.csproj b/src/Kp2aAutofillParser.Tests/Kp2aAutofillParser.Tests.csproj similarity index 80% rename from src/Kp2aAutofillParserTest/Kp2aAutofillParserTest.csproj rename to src/Kp2aAutofillParser.Tests/Kp2aAutofillParser.Tests.csproj index d68279ffb..4b0bdfe30 100644 --- a/src/Kp2aAutofillParserTest/Kp2aAutofillParserTest.csproj +++ b/src/Kp2aAutofillParser.Tests/Kp2aAutofillParser.Tests.csproj @@ -1,16 +1,18 @@ - net6.0 + net8.0 enable enable false + true + @@ -20,16 +22,10 @@ - - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - + + + + @@ -37,16 +33,19 @@ + + PreserveNewest + PreserveNewest - + PreserveNewest - + PreserveNewest - + PreserveNewest @@ -55,7 +54,7 @@ PreserveNewest - + PreserveNewest @@ -63,4 +62,8 @@ + + + + diff --git a/src/Kp2aAutofillParserTest/Usings.cs b/src/Kp2aAutofillParser.Tests/Usings.cs similarity index 100% rename from src/Kp2aAutofillParserTest/Usings.cs rename to src/Kp2aAutofillParser.Tests/Usings.cs diff --git a/src/Kp2aAutofillParserTest/android14-settings.json b/src/Kp2aAutofillParser.Tests/android14-settings.json similarity index 100% rename from src/Kp2aAutofillParserTest/android14-settings.json rename to src/Kp2aAutofillParser.Tests/android14-settings.json diff --git a/src/Kp2aAutofillParserTest/chrome-android10-amazon-it.json b/src/Kp2aAutofillParser.Tests/chrome-android10-amazon-it.json similarity index 100% rename from src/Kp2aAutofillParserTest/chrome-android10-amazon-it.json rename to src/Kp2aAutofillParser.Tests/chrome-android10-amazon-it.json diff --git a/src/Kp2aAutofillParser.Tests/citibank.json b/src/Kp2aAutofillParser.Tests/citibank.json new file mode 100644 index 000000000..7bfc2db4a --- /dev/null +++ b/src/Kp2aAutofillParser.Tests/citibank.json @@ -0,0 +1,1110 @@ +{ + "InputFields": [ + { + "IdEntry": null, + "Hint": null, + "ClassName": "android.widget.FrameLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "action_bar_root", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "action_mode_bar_stub", + "Hint": null, + "ClassName": "android.view.View", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "container_fl", + "Hint": null, + "ClassName": "android.widget.FrameLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "ll", + "Hint": null, + "ClassName": "android.widget.FrameLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": null, + "Hint": null, + "ClassName": "android.webkit.WebView", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "rootLayout", + "Hint": null, + "ClassName": "android.widget.RelativeLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "odyssey_bg_layout", + "Hint": null, + "ClassName": "android.widget.FrameLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "scrollViewOuter", + "Hint": null, + "ClassName": "android.widget.ScrollView", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "outerLayout", + "Hint": null, + "ClassName": "android.view.ViewGroup", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "bgGradientOverlay", + "Hint": null, + "ClassName": "android.view.View", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "loadingLayout", + "Hint": null, + "ClassName": "android.widget.RelativeLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "network_notify", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "scrollViewInner", + "Hint": null, + "ClassName": "android.widget.ScrollView", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "innerLayout", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "ody_login_linearlayout", + "Hint": null, + "ClassName": "android.widget.FrameLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "odyssey_constraint_layout", + "Hint": null, + "ClassName": "android.view.ViewGroup", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "odyFooterButtons", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "lnrCULogin", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "odyssey_multiple_container", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "openABankAccount_link", + "Hint": null, + "ClassName": "android.widget.Button", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "login_button", + "Hint": null, + "ClassName": "android.widget.Button", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "register_link", + "Hint": null, + "ClassName": "android.widget.Button", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "tellus", + "Hint": null, + "ClassName": "android.widget.FrameLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "tellus_rel", + "Hint": null, + "ClassName": "android.widget.RelativeLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "tellusBtn", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "tell_us_LL", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "tell_us_text", + "Hint": null, + "ClassName": "android.widget.TextView", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "tellusSingleLine", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "footerLayout", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "footerLayoutTop", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "footerButtons", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "footerSeparator", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "footerLabels", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "cdic_logo", + "Hint": null, + "ClassName": "android.widget.RelativeLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "language_link", + "Hint": null, + "ClassName": "android.widget.RelativeLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "txtLanguageLink", + "Hint": null, + "ClassName": "android.widget.TextView", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "copyright_message", + "Hint": null, + "ClassName": "android.widget.RelativeLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "txtCopyrightMessage", + "Hint": null, + "ClassName": "android.widget.TextView", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "support_link", + "Hint": null, + "ClassName": "android.widget.RelativeLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "txtSupportLink", + "Hint": null, + "ClassName": "android.widget.TextView", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "footerLayoutBottom", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "txtDisclaim", + "Hint": null, + "ClassName": "android.widget.TextView", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "authlogin_button", + "Hint": null, + "ClassName": "android.widget.RelativeLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "parentRL", + "Hint": null, + "ClassName": "android.widget.RelativeLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "component_progress_button_text_view", + "Hint": null, + "ClassName": "android.widget.TextView", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "component_progress_button_loading", + "Hint": null, + "ClassName": "android.widget.ProgressBar", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "default_logo_greet_layout", + "Hint": null, + "ClassName": "android.view.ViewGroup", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "tvGreetText", + "Hint": null, + "ClassName": "android.widget.TextView", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "tvReBranding", + "Hint": null, + "ClassName": "android.widget.TextView", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "tell_us_LL", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "headerView", + "Hint": null, + "ClassName": "android.widget.FrameLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "seperator_view", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "headerView", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "headerLeftActionIconLL", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "titleViewRo", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "tablelyt", + "Hint": null, + "ClassName": "android.widget.TableLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "titleView", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "headerTitleTextView", + "Hint": null, + "ClassName": "android.widget.TextView", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "headerSubTitleTextView", + "Hint": null, + "ClassName": "android.widget.TextView", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "headerRightActionIconLL", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "separator", + "Hint": null, + "ClassName": "android.view.View", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "announcement_notify", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "notificationParentLL", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "notifyTitle", + "Hint": null, + "ClassName": "android.widget.TextView", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "notifySubTitle", + "Hint": null, + "ClassName": "android.widget.TextView", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "topErrorLayout", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "introductionLayout", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "mfa_container_fl", + "Hint": null, + "ClassName": "android.widget.FrameLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "notify", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "loader", + "Hint": null, + "ClassName": "android.widget.RelativeLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "loading", + "Hint": null, + "ClassName": "android.widget.ProgressBar", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "status_txt", + "Hint": null, + "ClassName": "android.widget.TextView", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": null, + "Hint": null, + "ClassName": "android.widget.FrameLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "popuplayout", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": null, + "Hint": null, + "ClassName": "android.widget.FrameLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "action_bar_root", + "Hint": null, + "ClassName": "android.widget.FrameLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "container", + "Hint": null, + "ClassName": "android.widget.FrameLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "coordinator", + "Hint": null, + "ClassName": "android.view.ViewGroup", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "touch_outside", + "Hint": null, + "ClassName": "android.view.View", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "design_bottom_sheet", + "Hint": null, + "ClassName": "android.widget.FrameLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "root", + "Hint": null, + "ClassName": "android.widget.FrameLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "loadingLayout", + "Hint": null, + "ClassName": "android.widget.RelativeLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "container", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "titleTextView", + "Hint": null, + "ClassName": "android.widget.TextView", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "userIDTv", + "Hint": null, + "ClassName": "android.widget.TextView", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "txtUserID", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "parentRL", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "frmRoot", + "Hint": null, + "ClassName": "android.widget.FrameLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "odyTextLayout", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "odyEditText", + "Hint": null, + "ClassName": "android.widget.EditText", + "AutofillHints": [ + "passwordAuto" + ], + "IsFocused": true, + "InputType": 524433, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "rightActionText", + "Hint": null, + "ClassName": "android.widget.TextView", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "lblErrorMsg", + "Hint": null, + "ClassName": "android.widget.TextView", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "txtUserError", + "Hint": null, + "ClassName": "android.widget.TextView", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "lblUsername", + "Hint": null, + "ClassName": "android.widget.TextView", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "middleLayout", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "txtPassword", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "parentRL", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "frmRoot", + "Hint": null, + "ClassName": "android.widget.FrameLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "odyTextLayout", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "odyEditText", + "Hint": null, + "ClassName": "android.widget.EditText", + "AutofillHints": [ + "passwordAuto" + ], + "IsFocused": false, + "InputType": 129, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "rightActionText", + "Hint": null, + "ClassName": "android.widget.TextView", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "lblErrorMsg", + "Hint": null, + "ClassName": "android.widget.TextView", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "odyssey_login_text_input_sipedittxt", + "Hint": null, + "ClassName": "android.view.View", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "llErrorMsg", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "odyssey_login_button", + "Hint": null, + "ClassName": "android.widget.Button", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "odyssey_send_sms", + "Hint": null, + "ClassName": "android.widget.Button", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "odyssey_use_finger_button", + "Hint": null, + "ClassName": "android.widget.Button", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "odyssey_reset_button", + "Hint": null, + "ClassName": "android.widget.Button", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "action_mode_bar_stub", + "Hint": null, + "ClassName": "android.view.View", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + } + ], + "PackageId": "com.konylabs.cbplpat", + "WebDomain": null +} \ No newline at end of file diff --git a/src/Kp2aAutofillParserTest/com-expressvpn-vpn-android13.json b/src/Kp2aAutofillParser.Tests/com-expressvpn-vpn-android13.json similarity index 100% rename from src/Kp2aAutofillParserTest/com-expressvpn-vpn-android13.json rename to src/Kp2aAutofillParser.Tests/com-expressvpn-vpn-android13.json diff --git a/src/Kp2aAutofillParserTest/com-ifs-banking-fiid3364-android13.json b/src/Kp2aAutofillParser.Tests/com-ifs-banking-fiid3364-android13.json similarity index 100% rename from src/Kp2aAutofillParserTest/com-ifs-banking-fiid3364-android13.json rename to src/Kp2aAutofillParser.Tests/com-ifs-banking-fiid3364-android13.json diff --git a/src/Kp2aAutofillParserTest/com-servicenet-mobile-focused.json b/src/Kp2aAutofillParser.Tests/com-servicenet-mobile-focused.json similarity index 100% rename from src/Kp2aAutofillParserTest/com-servicenet-mobile-focused.json rename to src/Kp2aAutofillParser.Tests/com-servicenet-mobile-focused.json diff --git a/src/Kp2aAutofillParserTest/com-servicenet-mobile-no-focus.json b/src/Kp2aAutofillParser.Tests/com-servicenet-mobile-no-focus.json similarity index 100% rename from src/Kp2aAutofillParserTest/com-servicenet-mobile-no-focus.json rename to src/Kp2aAutofillParser.Tests/com-servicenet-mobile-no-focus.json diff --git a/src/Kp2aAutofillParserTest/firefox-amazon-it.json b/src/Kp2aAutofillParser.Tests/firefox-amazon-it.json similarity index 100% rename from src/Kp2aAutofillParserTest/firefox-amazon-it.json rename to src/Kp2aAutofillParser.Tests/firefox-amazon-it.json diff --git a/src/Kp2aAutofillParserTest/imdb.json b/src/Kp2aAutofillParser.Tests/imdb.json similarity index 100% rename from src/Kp2aAutofillParserTest/imdb.json rename to src/Kp2aAutofillParser.Tests/imdb.json diff --git a/src/Kp2aAutofillParser/Kp2aAutofillParser.csproj b/src/Kp2aAutofillParser/Kp2aAutofillParser.csproj index 375762cdd..036e5526d 100644 --- a/src/Kp2aAutofillParser/Kp2aAutofillParser.csproj +++ b/src/Kp2aAutofillParser/Kp2aAutofillParser.csproj @@ -1,12 +1,10 @@ - - + - netstandard2.1 + net8.0 enable + enable - - + - - + \ No newline at end of file diff --git a/src/Kp2aBusinessLogic/Io/BuiltInFileStorage.cs b/src/Kp2aBusinessLogic/Io/BuiltInFileStorage.cs index aa8f428fc..f47b777e1 100644 --- a/src/Kp2aBusinessLogic/Io/BuiltInFileStorage.cs +++ b/src/Kp2aBusinessLogic/Io/BuiltInFileStorage.cs @@ -13,7 +13,7 @@ using Android.OS; using Android.Preferences; using Java.IO; -using Android.Support.V4; + using KeePassLib.Serialization; using KeePassLib.Utility; using File = System.IO.File; @@ -291,7 +291,7 @@ public void PrepareFileUsage(Context ctx, IOConnectionInfo ioc) public void OnCreate(IFileStorageSetupActivity fileStorageSetupActivity, Bundle savedInstanceState) { - Android.Support.V4.App.ActivityCompat.RequestPermissions(((Activity)fileStorageSetupActivity), new[] { Manifest.Permission.WriteExternalStorage, Manifest.Permission.ReadExternalStorage }, 0); + AndroidX.Core.App.ActivityCompat.RequestPermissions(((Activity)fileStorageSetupActivity), new[] { Manifest.Permission.WriteExternalStorage, Manifest.Permission.ReadExternalStorage }, 0); } public void OnResume(IFileStorageSetupActivity activity) diff --git a/src/Kp2aBusinessLogic/Io/IoUtil.cs b/src/Kp2aBusinessLogic/Io/IoUtil.cs index 6956635e1..054b2a873 100644 --- a/src/Kp2aBusinessLogic/Io/IoUtil.cs +++ b/src/Kp2aBusinessLogic/Io/IoUtil.cs @@ -34,14 +34,14 @@ public static bool TryTakePersistablePermissions(ContentResolver contentResolver } return false; } - public static bool DeleteDir(File dir, bool contentsOnly=false) + public static bool DeleteDir(Java.IO.File dir, bool contentsOnly=false) { if (dir != null && dir.IsDirectory) { String[] children = dir.List(); for (int i = 0; i < children.Length; i++) { - bool success = DeleteDir(new File(dir, children[i])); + bool success = DeleteDir(new Java.IO.File(dir, children[i])); if (!success) { return false; @@ -77,12 +77,12 @@ public static bool IsInInternalDirectory(string path, Context context) { try { - File filesDir = context.FilesDir.CanonicalFile; - File noBackupDir = GetInternalDirectory(context).CanonicalFile; - File ourFile = new File(path).CanonicalFile; - //http://www.java2s.com/Tutorial/Java/0180__File/Checkswhetherthechilddirectoryisasubdirectoryofthebasedirectory.htm + Java.IO.File filesDir = context.FilesDir.CanonicalFile; + Java.IO.File noBackupDir = GetInternalDirectory(context).CanonicalFile; + Java.IO.File ourFile = new Java.IO.File(path).CanonicalFile; + //http://www.java2s.com/Tutorial/Java/0180__File/Checkswhetherthechilddirectoryisasubdirectoryofthebasedirectory.htm - File parentFile = ourFile; + Java.IO.File parentFile = ourFile; while (parentFile != null) { if ((filesDir.Equals(parentFile) || noBackupDir.Equals(parentFile))) @@ -137,7 +137,7 @@ public static IOConnectionInfo GetInternalIoc(IOConnectionInfo sourceIoc, Contex targetPath = targetPath.Trim("|\\?*<\":>+[]/'".ToCharArray()); if (targetPath == "") targetPath = "internal"; - if (new File(internalDirectory, targetPath).Exists()) + if (new Java.IO.File(internalDirectory, targetPath).Exists()) { int c = 1; var ext = UrlUtil.GetExtension(targetPath); @@ -148,9 +148,9 @@ public static IOConnectionInfo GetInternalIoc(IOConnectionInfo sourceIoc, Contex targetPath = filenameWithoutExt + c; if (!String.IsNullOrEmpty(ext)) targetPath += "." + ext; - } while (new File(internalDirectory, targetPath).Exists()); + } while (new Java.IO.File(internalDirectory, targetPath).Exists()); } - return IOConnectionInfo.FromPath(new File(internalDirectory, targetPath).CanonicalPath); + return IOConnectionInfo.FromPath(new Java.IO.File(internalDirectory, targetPath).CanonicalPath); } public static IOConnectionInfo ImportFileToInternalDirectory(IOConnectionInfo sourceIoc, Context ctx, IKp2aApp app) diff --git a/src/Kp2aBusinessLogic/Io/JavaFileStorage.cs b/src/Kp2aBusinessLogic/Io/JavaFileStorage.cs index f2016654d..f0429e117 100644 --- a/src/Kp2aBusinessLogic/Io/JavaFileStorage.cs +++ b/src/Kp2aBusinessLogic/Io/JavaFileStorage.cs @@ -207,7 +207,7 @@ public IEnumerable ListContents(IOConnectionInfo ioc) { try { - IList entries = Jfs.ListFiles(IocToPath(ioc)); + IList entries = Jfs.ListFiles(IocToPath(ioc)); return entries.Select(ConvertToFileDescription); @@ -222,7 +222,7 @@ public IEnumerable ListContents(IOConnectionInfo ioc) } } - private FileDescription ConvertToFileDescription(JavaFileStorageFileEntry e) + private FileDescription ConvertToFileDescription(IJavaFileStorage.FileEntry e) { return new FileDescription { @@ -260,14 +260,14 @@ public bool RequiresSetup(IOConnectionInfo ioConnection) public virtual void StartSelectFile(IFileStorageSetupInitiatorActivity activity, bool isForSave, int requestCode, string protocolId) { Kp2aLog.Log("StartSelectFile " + protocolId); - _jfs.StartSelectFile((IJavaFileStorageFileStorageSetupInitiatorActivity) activity, isForSave, requestCode); + _jfs.StartSelectFile((IJavaFileStorage.IFileStorageSetupInitiatorActivity) activity, isForSave, requestCode); } public void PrepareFileUsage(IFileStorageSetupInitiatorActivity activity, IOConnectionInfo ioc, int requestCode, Boolean alwaysReturnSuccess) { try { - _jfs.PrepareFileUsage((IJavaFileStorageFileStorageSetupInitiatorActivity) activity, IocToPath(ioc), requestCode, + _jfs.PrepareFileUsage((IJavaFileStorage.IFileStorageSetupInitiatorActivity) activity, IocToPath(ioc), requestCode, alwaysReturnSuccess); } catch (Exception e) @@ -301,25 +301,25 @@ public bool IsReadOnly(IOConnectionInfo ioc, OptionalOut reason = n public void OnCreate(IFileStorageSetupActivity activity, Bundle savedInstanceState) { - _jfs.OnCreate(((IJavaFileStorageFileStorageSetupActivity)activity), savedInstanceState); + _jfs.OnCreate(((IJavaFileStorage.IFileStorageSetupActivity)activity), savedInstanceState); } public void OnResume(IFileStorageSetupActivity activity) { #if DEBUG - Kp2aLog.Log("JFS/OnResume Ioc.Path=" +activity.Ioc.Path+". Path="+((IJavaFileStorageFileStorageSetupActivity)activity).Path); + Kp2aLog.Log("JFS/OnResume Ioc.Path=" +activity.Ioc.Path+". Path="+((IJavaFileStorage.IFileStorageSetupActivity)activity).Path); #endif - _jfs.OnResume(((IJavaFileStorageFileStorageSetupActivity) activity)); + _jfs.OnResume(((IJavaFileStorage.IFileStorageSetupActivity) activity)); } public void OnStart(IFileStorageSetupActivity activity) { - _jfs.OnStart(((IJavaFileStorageFileStorageSetupActivity) activity)); + _jfs.OnStart(((IJavaFileStorage.IFileStorageSetupActivity) activity)); } public void OnActivityResult(IFileStorageSetupActivity activity, int requestCode, int resultCode, Intent data) { - _jfs.OnActivityResult(((IJavaFileStorageFileStorageSetupActivity) activity), requestCode, resultCode, data); + _jfs.OnActivityResult(((IJavaFileStorage.IFileStorageSetupActivity) activity), requestCode, resultCode, data); } public string GetDisplayName(IOConnectionInfo ioc) @@ -367,7 +367,7 @@ public virtual string IocToPath(IOConnectionInfo ioc) public void OnRequestPermissionsResult(IFileStorageSetupActivity fileStorageSetupActivity, int requestCode, string[] permissions, Permission[] grantResults) { - _jfs.OnRequestPermissionsResult(((IJavaFileStorageFileStorageSetupActivity) fileStorageSetupActivity), requestCode, + _jfs.OnRequestPermissionsResult(((IJavaFileStorage.IFileStorageSetupActivity) fileStorageSetupActivity), requestCode, permissions, grantResults.Select(p => (int)p).ToArray()); } } diff --git a/src/Kp2aBusinessLogic/Io/OneDriveFileStorage.cs b/src/Kp2aBusinessLogic/Io/OneDriveFileStorage.cs index 25ff4d9b2..a6da1c7d3 100644 --- a/src/Kp2aBusinessLogic/Io/OneDriveFileStorage.cs +++ b/src/Kp2aBusinessLogic/Io/OneDriveFileStorage.cs @@ -1,31 +1,23 @@ -using System; using System.Collections.Generic; using System.IO; -using System.Linq; -using System.Text; - -using Android.App; using Android.Content; using Android.OS; -using Android.Runtime; -using Android.Views; -using Android.Widget; using KeePassLib.Serialization; -#if !EXCLUDE_JAVAFILESTORAGE -using Keepass2android.Javafilestorage; +using Exception = Java.Lang.Exception; namespace keepass2android.Io { - public class OneDriveFileStorage: JavaFileStorage + /// + /// This IFileStorage implementation becomes picked if a user is using a skydrive:// or onedrive:// file. + /// These refer to an old (Java) implementation which was replaced starting in 2019. The successor uses onedrive2:// (see OneDrive2FileStorage) + /// The Java implementation was removed in 2024 when the jar files became unavailable. We are keeping this file to notify any user who haven't updated their + /// file storage within 5 years. + /// This file should be removed around mid 2025. + /// + public class OneDriveFileStorage: IFileStorage { - private const string ClientId = "000000004010C234"; - - public OneDriveFileStorage(Context ctx, IKp2aApp app) : - base(new Keepass2android.Javafilestorage.OneDriveStorage(ctx, ClientId), app) - { - } - - public override IEnumerable SupportedProtocols + + public IEnumerable SupportedProtocols { get { @@ -34,10 +26,146 @@ public override IEnumerable SupportedProtocols } } - public override bool UserShouldBackup + private Exception GetDeprecatedMessage() + { + return new Exception( + "You have opened your file through a deprecated Microsoft API. Please select Change database, Open Database and then select One Drive again."); + } + + public bool UserShouldBackup { get { return false; } } - } + + public void Delete(IOConnectionInfo ioc) + { + throw GetDeprecatedMessage(); + } + + public bool CheckForFileChangeFast(IOConnectionInfo ioc, string previousFileVersion) + { + throw GetDeprecatedMessage(); + } + + public string GetCurrentFileVersionFast(IOConnectionInfo ioc) + { + throw GetDeprecatedMessage(); + } + + public Stream OpenFileForRead(IOConnectionInfo ioc) + { + throw GetDeprecatedMessage(); + } + + public IWriteTransaction OpenWriteTransaction(IOConnectionInfo ioc, bool useFileTransaction) + { + throw GetDeprecatedMessage(); + } + + public string GetFilenameWithoutPathAndExt(IOConnectionInfo ioc) + { + throw GetDeprecatedMessage(); + } + + public string GetFileExtension(IOConnectionInfo ioc) + { + throw GetDeprecatedMessage(); + } + + public bool RequiresCredentials(IOConnectionInfo ioc) + { + throw GetDeprecatedMessage(); + } + + public void CreateDirectory(IOConnectionInfo ioc, string newDirName) + { + throw GetDeprecatedMessage(); + } + + public IEnumerable ListContents(IOConnectionInfo ioc) + { + throw GetDeprecatedMessage(); + } + + public FileDescription GetFileDescription(IOConnectionInfo ioc) + { + throw GetDeprecatedMessage(); + } + + public bool RequiresSetup(IOConnectionInfo ioConnection) + { + throw GetDeprecatedMessage(); + } + + public string IocToPath(IOConnectionInfo ioc) + { + throw GetDeprecatedMessage(); + } + + public void StartSelectFile(IFileStorageSetupInitiatorActivity activity, bool isForSave, int requestCode, string protocolId) + { + throw GetDeprecatedMessage(); + } + + public void PrepareFileUsage(IFileStorageSetupInitiatorActivity activity, IOConnectionInfo ioc, int requestCode, + bool alwaysReturnSuccess) + { + throw GetDeprecatedMessage(); + } + + public void PrepareFileUsage(Context ctx, IOConnectionInfo ioc) + { + throw GetDeprecatedMessage(); + } + + public void OnCreate(IFileStorageSetupActivity activity, Bundle savedInstanceState) + { + throw GetDeprecatedMessage(); + } + + public void OnResume(IFileStorageSetupActivity activity) + { + throw GetDeprecatedMessage(); + } + + public void OnStart(IFileStorageSetupActivity activity) + { + throw GetDeprecatedMessage(); + } + + public void OnActivityResult(IFileStorageSetupActivity activity, int requestCode, int resultCode, Intent data) + { + throw GetDeprecatedMessage(); + } + + public string GetDisplayName(IOConnectionInfo ioc) + { + throw GetDeprecatedMessage(); + } + + public string CreateFilePath(string parent, string newFilename) + { + throw GetDeprecatedMessage(); + } + + public IOConnectionInfo GetParentPath(IOConnectionInfo ioc) + { + throw GetDeprecatedMessage(); + } + + public IOConnectionInfo GetFilePath(IOConnectionInfo folderPath, string filename) + { + throw GetDeprecatedMessage(); + } + + public bool IsPermanentLocation(IOConnectionInfo ioc) + { + throw GetDeprecatedMessage(); + } + + public bool IsReadOnly(IOConnectionInfo ioc, OptionalOut reason = null) + { + throw GetDeprecatedMessage(); + } + } } -#endif \ No newline at end of file diff --git a/src/Kp2aBusinessLogic/Kp2aBusinessLogic.csproj b/src/Kp2aBusinessLogic/Kp2aBusinessLogic.csproj index 8964001db..15604f0e8 100644 --- a/src/Kp2aBusinessLogic/Kp2aBusinessLogic.csproj +++ b/src/Kp2aBusinessLogic/Kp2aBusinessLogic.csproj @@ -1,315 +1,33 @@ - - - - - - + - Debug - AnyCPU - {53A9CB7F-6553-4BC0-B56B-9410BB2E59AA} - {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - Properties - keepass2android - Kp2aBusinessLogic - 512 - Resources\Resource.designer.cs - Off - v13.0 - false - $(Flavor) - - + net8.0-android + 21 + enable + enable - - true - full - false - bin\Debug\ - DEBUG;_EXCLUDE_TWOFISH;_EXCLUDE_KEYBOARD;_EXCLUDE_FILECHOOSER;_EXCLUDE_JAVAFILESTORAGE;INCLUDE_KEYTRANSFORM - prompt - 4 - None - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - 4G - false - - - - - $(DefineConstants);NoNet;EXCLUDE_JAVAFILESTORAGE - - - - - bin\ReleaseNoNet\ - TRACE;NoNet;EXCLUDE_JAVAFILESTORAGE - true - pdbonly - AnyCPU - prompt - MinimumRecommendedRules.ruleset - false - 4 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {3c0f7fe5-639f-4422-a087-8b26cf862d1b} - AndroidFileChooserBinding - - - {48574278-4779-4b3a-a9e4-9cf1bc285d0b} - JavaFileStorageBindings - - - {2db80c77-d46f-4970-b967-e9ffa9b2ac2e} - PCloudBindings - - - - - {545B4A6B-8BBA-4FBE-92FC-4AC060122A54} - KeePassLib2Android - - - {70D3844A-D9FA-4A64-B205-A84C6A822196} - KP2AKdbLibraryBinding - - - {5CF675A5-9BEE-4720-BED9-D5BF14A2EBF9} - TwofishCipher - - - - - - - 48.0.0 - - - 1.10.3 - - - 1.21.0 - - - 1.0.0-preview.7 - - - 4.49.1 - + + + + + + + - - 1.1.1.3 - - - 1.1.1.3 - - - 1.1.1.3 - - - 1.1.1.3 - - - 1.1.1.3 - - - 1.1.1.3 - - - 1.1.1.3 - - - 28.0.0.3 - - - 28.0.0.3 - - - 28.0.0.3 - - - 28.0.0.3 - - - 28.0.0.3 - - - 28.0.0.3 - - - 28.0.0.3 - - - 28.0.0.3 - - - 28.0.0.3 - - - 28.0.0.3 - - - 28.0.0.3 - - - 28.0.0.3 - - - 28.0.0.3 - - - 28.0.0.3 - - - 28.0.0.3 - - - 28.0.0.3 - - - 28.0.0.3 - - - 28.0.0.3 - - - 28.0.0.3 - - - 28.0.0.3 - - - 28.0.0.3 - - - 28.0.0.3 - - - 28.0.0.3 - - - 28.0.0.3 - - - 28.0.0.3 - - - 28.0.0.3 - - - 28.0.0.3 - - - 1.2.0.3 - + + + + + - - - + + + + + + + \ No newline at end of file diff --git a/src/Kp2aBusinessLogic/ProgressTask.cs b/src/Kp2aBusinessLogic/ProgressTask.cs index f56a78b0c..62d4b6ce6 100644 --- a/src/Kp2aBusinessLogic/ProgressTask.cs +++ b/src/Kp2aBusinessLogic/ProgressTask.cs @@ -75,7 +75,7 @@ public Activity PreviouslyActiveActivity private readonly RunnableOnFinish _task; private IProgressDialog _progressDialog; private readonly IKp2aApp _app; - private Thread _thread; + private Java.Lang.Thread _thread; private Activity _activeActivity, _previouslyActiveActivity; private ProgressDialogStatusLogger _progressDialogStatusLogger; @@ -127,7 +127,7 @@ private void SetupProgressDialog(IKp2aApp app) public void Run(bool allowOverwriteCurrentTask = false) { if ((!allowOverwriteCurrentTask) && (_currentTask != null)) - throw new Exception("Cannot start another ProgressTask while ProgressTask is already running! " + _task.GetType().Name + "/" + _currentTask._task.GetType().Name); + throw new System.Exception("Cannot start another ProgressTask while ProgressTask is already running! " + _task.GetType().Name + "/" + _currentTask._task.GetType().Name); _currentTask = this; // Show process dialog @@ -135,7 +135,7 @@ public void Run(bool allowOverwriteCurrentTask = false) // Start Thread to Run task - _thread = new Thread(_task.Run); + _thread = new Java.Lang.Thread(_task.Run); _thread.Start(); } diff --git a/src/Kp2aBusinessLogic/Properties/AssemblyInfo.cs b/src/Kp2aBusinessLogic/Properties/AssemblyInfo.cs deleted file mode 100644 index 3588c03f4..000000000 --- a/src/Kp2aBusinessLogic/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using Android.App; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Kp2aBusinessLogic")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Kp2aBusinessLogic")] -[assembly: AssemblyCopyright("Copyright © 2013")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] -[assembly: ComVisible(false)] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] - -// Add some common permissions, these can be removed if not needed -[assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage)] diff --git a/src/Kp2aBusinessLogic/database/KdbxDatabaseFormat.cs b/src/Kp2aBusinessLogic/database/KdbxDatabaseFormat.cs index 210c9ecf5..0d9ac6fcf 100644 --- a/src/Kp2aBusinessLogic/database/KdbxDatabaseFormat.cs +++ b/src/Kp2aBusinessLogic/database/KdbxDatabaseFormat.cs @@ -10,6 +10,12 @@ public class KdbxDatabaseFormat : IDatabaseFormat { private readonly KdbxFormat _format; + public static KdbxFormat GetFormatToUse(string fileExt) + { + return fileExt.Equals("kdbp", StringComparison.OrdinalIgnoreCase) ? KdbxFormat.ProtocolBuffers : + (fileExt.Equals("xml", StringComparison.OrdinalIgnoreCase) ? KdbxFormat.PlainXml : KdbxFormat.Default); + } + public KdbxDatabaseFormat(KdbxFormat format) { _format = format; diff --git a/src/Kp2aBusinessLogic/database/edit/LoadDB.cs b/src/Kp2aBusinessLogic/database/edit/LoadDB.cs index 03cbaad2f..3c476abdc 100644 --- a/src/Kp2aBusinessLogic/database/edit/LoadDB.cs +++ b/src/Kp2aBusinessLogic/database/edit/LoadDB.cs @@ -82,7 +82,7 @@ public override void Run() } //ok, try to load the database. Let's start with Kdbx format and retry later if that is the wrong guess: - _format = new KdbxDatabaseFormat(KdbpFile.GetFormatToUse(_app.GetFileStorage(_ioc).GetFileExtension(_ioc))); + _format = new KdbxDatabaseFormat(KdbxDatabaseFormat.GetFormatToUse(_app.GetFileStorage(_ioc).GetFileExtension(_ioc))); TryLoad(databaseStream); diff --git a/src/Kp2aBusinessLogic/database/edit/OnFinish.cs b/src/Kp2aBusinessLogic/database/edit/OnFinish.cs index 383f402ce..455e3a53a 100644 --- a/src/Kp2aBusinessLogic/database/edit/OnFinish.cs +++ b/src/Kp2aBusinessLogic/database/edit/OnFinish.cs @@ -21,6 +21,7 @@ You should have received a copy of the GNU General Public License using Android.Content; using Android.OS; using Android.Widget; +using Google.Android.Material.Dialog; namespace keepass2android { @@ -132,7 +133,7 @@ public static void DisplayMessage(Context ctx, string message, bool makeDialog) { try { - AlertDialog.Builder builder = new AlertDialog.Builder(ctx); + MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(ctx); builder.SetMessage(message) .SetPositiveButton(Android.Resource.String.Ok, (sender, args) => ((Dialog)sender).Dismiss()) diff --git a/src/Kp2aBusinessLogic/database/edit/SaveDB.cs b/src/Kp2aBusinessLogic/database/edit/SaveDB.cs index 454dcfc3c..c432d4162 100644 --- a/src/Kp2aBusinessLogic/database/edit/SaveDB.cs +++ b/src/Kp2aBusinessLogic/database/edit/SaveDB.cs @@ -43,7 +43,7 @@ public class SaveDb : RunnableOnFinish { /// private readonly Stream _streamForOrigFile; private readonly Context _ctx; - private Thread _workerThread; + private Java.Lang.Thread _workerThread; public SaveDb(Activity ctx, IKp2aApp app, Database db, OnFinish finish, bool dontSave) : base(ctx, finish) @@ -213,7 +213,7 @@ private void RunInWorkerThread(Action runHandler) { try { - _workerThread = new Thread(() => + _workerThread = new Java.Lang.Thread(() => { try { diff --git a/src/Kp2aKeyboardBinding/Additions/AboutAdditions.txt b/src/Kp2aKeyboardBinding/Additions/AboutAdditions.txt index 9141ebd73..2775bd360 100644 --- a/src/Kp2aKeyboardBinding/Additions/AboutAdditions.txt +++ b/src/Kp2aKeyboardBinding/Additions/AboutAdditions.txt @@ -1,48 +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; } -} +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; } +} \ No newline at end of file diff --git a/src/Kp2aKeyboardBinding/Kp2aKeyboardBinding.csproj b/src/Kp2aKeyboardBinding/Kp2aKeyboardBinding.csproj index 869dcc354..696dc5065 100644 --- a/src/Kp2aKeyboardBinding/Kp2aKeyboardBinding.csproj +++ b/src/Kp2aKeyboardBinding/Kp2aKeyboardBinding.csproj @@ -1,72 +1,11 @@ - - + - Debug - AnyCPU - {A8779D4D-7C49-4C2F-82BD-2CDC448391DA} - {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{10368E6C-D01B-4462-8E8B-01FC667A7035};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - Kp2aKeyboardBinding - Assets - Resources - Kp2aKeyboardBinding - false - v10.0 - XAJavaInterop1 - class-parse + net8.0-android + 21 + enable + enable - - True - full - False - bin\Debug - DEBUG; - prompt - 4 - False - None - - - none - True - bin\Release - prompt - 4 - False - False - - - bin\ReleaseNoNet\ - true - AnyCPU - prompt - MinimumRecommendedRules.ruleset - false - 4 - - - - - - - - - - - - - Jars\app-debug.aar - - - - - - - - - - - + - + \ No newline at end of file diff --git a/src/Kp2aKeyboardBinding/Properties/AssemblyInfo.cs b/src/Kp2aKeyboardBinding/Properties/AssemblyInfo.cs deleted file mode 100644 index a8aed8844..000000000 --- a/src/Kp2aKeyboardBinding/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using Android.App; - -// Information about this assembly is defined by the following attributes. -// Change them to the values specific to your project. - -[assembly: AssemblyTitle("Kp2aKeyboardBinding")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("")] -[assembly: AssemblyCopyright("Philipp")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}". -// The form "{Major}.{Minor}.*" will automatically update the build and revision, -// and "{Major}.{Minor}.{Build}.*" will update just the revision. - -[assembly: AssemblyVersion("1.0.0")] - -// The following attributes are used to specify the signing key for the assembly, -// if desired. See the Mono documentation for more information about signing. - -//[assembly: AssemblyDelaySign(false)] -//[assembly: AssemblyKeyFile("")] - diff --git a/src/Kp2aKeyboardBinding/Transforms/EnumFields.xml b/src/Kp2aKeyboardBinding/Transforms/EnumFields.xml index b3aca487e..4dddf452c 100644 --- a/src/Kp2aKeyboardBinding/Transforms/EnumFields.xml +++ b/src/Kp2aKeyboardBinding/Transforms/EnumFields.xml @@ -1,14 +1,3 @@ - - - + + + \ No newline at end of file diff --git a/src/Kp2aKeyboardBinding/Transforms/EnumMethods.xml b/src/Kp2aKeyboardBinding/Transforms/EnumMethods.xml index 0ffc15ca4..1918b0cf6 100644 --- a/src/Kp2aKeyboardBinding/Transforms/EnumMethods.xml +++ b/src/Kp2aKeyboardBinding/Transforms/EnumMethods.xml @@ -1,11 +1,3 @@ - - - + + + \ No newline at end of file diff --git a/src/Kp2aKeyboardBinding/Transforms/Metadata.xml b/src/Kp2aKeyboardBinding/Transforms/Metadata.xml index 3601ad1c3..ccb9c065a 100644 --- a/src/Kp2aKeyboardBinding/Transforms/Metadata.xml +++ b/src/Kp2aKeyboardBinding/Transforms/Metadata.xml @@ -1,11 +1,4 @@ - - - - - + + + + diff --git a/src/PCloudBindings/Additions/AboutAdditions.txt b/src/PCloudBindings/Additions/AboutAdditions.txt index 08caee33b..2775bd360 100644 --- a/src/PCloudBindings/Additions/AboutAdditions.txt +++ b/src/PCloudBindings/Additions/AboutAdditions.txt @@ -1,4 +1,4 @@ -Additions allow you to add arbitrary C# to the generated classes +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. @@ -11,9 +11,9 @@ this: public partial class Rectangle { public Rectangle (int x, int y, int width, int height) - { - // JNI bindings - } + { + // JNI bindings + } } Imagine we want to add a constructor to this class that takes a Point and @@ -23,9 +23,9 @@ 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) - { - } + this (location.X, location.Y, size.Width, size.Height) + { + } } At compile time, the additions class will be added to the generated class @@ -44,5 +44,5 @@ 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; } + public int Y { get; set; } } \ No newline at end of file diff --git a/src/PCloudBindings/Jars/AboutJars.txt b/src/PCloudBindings/Jars/AboutJars.txt deleted file mode 100644 index c359b62f4..000000000 --- a/src/PCloudBindings/Jars/AboutJars.txt +++ /dev/null @@ -1,24 +0,0 @@ -This directory is for Android .jars. - -There are 2 types of jars that are supported: - -== Input Jar == - -This is the jar that bindings should be generated for. - -For example, if you were binding the Google Maps library, this would -be Google's "maps.jar". - -Set the build action for these jars in the properties page to "InputJar". - - -== Reference Jars == - -These are jars that are referenced by the input jar. C# bindings will -not be created for these jars. These jars will be used to resolve -types used by the input jar. - -NOTE: Do not add "android.jar" as a reference jar. It will be added automatically -based on the Target Framework selected. - -Set the build action for these jars in the properties page to "ReferenceJar". \ No newline at end of file diff --git a/src/PCloudBindings/PCloudBindings.csproj b/src/PCloudBindings/PCloudBindings.csproj index 3b99dd229..495b27a63 100644 --- a/src/PCloudBindings/PCloudBindings.csproj +++ b/src/PCloudBindings/PCloudBindings.csproj @@ -1,77 +1,12 @@ - - + - Debug - AnyCPU - {2DB80C77-D46F-4970-B967-E9FFA9B2AC2E} - {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{10368E6C-D01B-4462-8E8B-01FC667A7035};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - Properties - PCloudBindings - PCouldBindings - 512 - false - v8.0 - XAJavaInterop1 - class-parse + net8.0-android + 21 + enable + enable - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 0 - None - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - bin\ReleaseNoNet\ - TRACE - true - pdbonly - AnyCPU - prompt - MinimumRecommendedRules.ruleset - false - 4 - - - - - - - - - - - - - - - - - - - - - - + + - + \ No newline at end of file diff --git a/src/PCloudBindings/Properties/AssemblyInfo.cs b/src/PCloudBindings/Properties/AssemblyInfo.cs deleted file mode 100644 index 8e086067e..000000000 --- a/src/PCloudBindings/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using Android.App; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("PCloudBindings")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("PCloudBindings")] -[assembly: AssemblyCopyright("Copyright © 2013")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] -[assembly: ComVisible(false)] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.1.0.0")] -[assembly: AssemblyFileVersion("1.1.0.0")] diff --git a/src/PCloudBindings/Transforms/EnumFields.xml b/src/PCloudBindings/Transforms/EnumFields.xml index 22959957e..8ee086d7e 100644 --- a/src/PCloudBindings/Transforms/EnumFields.xml +++ b/src/PCloudBindings/Transforms/EnumFields.xml @@ -1,14 +1,3 @@  - + \ No newline at end of file diff --git a/src/PCloudBindings/Transforms/EnumMethods.xml b/src/PCloudBindings/Transforms/EnumMethods.xml index 49216c618..1918b0cf6 100644 --- a/src/PCloudBindings/Transforms/EnumMethods.xml +++ b/src/PCloudBindings/Transforms/EnumMethods.xml @@ -1,13 +1,3 @@  - + \ No newline at end of file diff --git a/src/PCloudBindings/Transforms/Metadata.xml b/src/PCloudBindings/Transforms/Metadata.xml index e1ee32769..6b36b9782 100644 --- a/src/PCloudBindings/Transforms/Metadata.xml +++ b/src/PCloudBindings/Transforms/Metadata.xml @@ -1,10 +1,4 @@ - - + + diff --git a/src/PCloudBindings/Jars/pcloud-sdk-android-1.9.1.aar b/src/PCloudBindings/pcloud-sdk-android-1.9.1.aar similarity index 100% rename from src/PCloudBindings/Jars/pcloud-sdk-android-1.9.1.aar rename to src/PCloudBindings/pcloud-sdk-android-1.9.1.aar diff --git a/src/PCloudBindings/Jars/pcloud-sdk-java-core-1.9.1.jar b/src/PCloudBindings/pcloud-sdk-java-core-1.9.1.jar similarity index 100% rename from src/PCloudBindings/Jars/pcloud-sdk-java-core-1.9.1.jar rename to src/PCloudBindings/pcloud-sdk-java-core-1.9.1.jar diff --git a/src/PluginSdkBinding/Additions/AboutAdditions.txt b/src/PluginSdkBinding/Additions/AboutAdditions.txt index 08caee33b..2775bd360 100644 --- a/src/PluginSdkBinding/Additions/AboutAdditions.txt +++ b/src/PluginSdkBinding/Additions/AboutAdditions.txt @@ -1,4 +1,4 @@ -Additions allow you to add arbitrary C# to the generated classes +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. @@ -11,9 +11,9 @@ this: public partial class Rectangle { public Rectangle (int x, int y, int width, int height) - { - // JNI bindings - } + { + // JNI bindings + } } Imagine we want to add a constructor to this class that takes a Point and @@ -23,9 +23,9 @@ 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) - { - } + this (location.X, location.Y, size.Width, size.Height) + { + } } At compile time, the additions class will be added to the generated class @@ -44,5 +44,5 @@ 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; } + public int Y { get; set; } } \ No newline at end of file diff --git a/src/PluginSdkBinding/PluginSdkBinding.csproj b/src/PluginSdkBinding/PluginSdkBinding.csproj index 11a089fb0..16be77496 100644 --- a/src/PluginSdkBinding/PluginSdkBinding.csproj +++ b/src/PluginSdkBinding/PluginSdkBinding.csproj @@ -1,77 +1,11 @@ - - + - Debug - AnyCPU - {3DA3911E-36DE-465E-8F15-F1991B6437E5} - {10368E6C-D01B-4462-8E8B-01FC667A7035};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - Properties - PluginSdkBinding - PluginSdkBinding - 512 - false - v8.0 - XAJavaInterop1 - class-parse + net8.0-android + 21 + enable + enable - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - None - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - bin\ReleaseNoNet\ - TRACE - true - pdbonly - AnyCPU - prompt - MinimumRecommendedRules.ruleset - false - 4 - - - - - - - - - - - - - Jars\Keepass2AndroidPluginSDK2-release.aar - - - - - - - + - - - + \ No newline at end of file diff --git a/src/PluginSdkBinding/Properties/AssemblyInfo.cs b/src/PluginSdkBinding/Properties/AssemblyInfo.cs deleted file mode 100644 index 136f40899..000000000 --- a/src/PluginSdkBinding/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using Android.App; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("PluginSdkBinding")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("PluginSdkBinding")] -[assembly: AssemblyCopyright("Copyright © 2014")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] -[assembly: ComVisible(false)] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/PluginSdkBinding/Transforms/EnumFields.xml b/src/PluginSdkBinding/Transforms/EnumFields.xml index 22959957e..4dddf452c 100644 --- a/src/PluginSdkBinding/Transforms/EnumFields.xml +++ b/src/PluginSdkBinding/Transforms/EnumFields.xml @@ -1,14 +1,3 @@  - + \ No newline at end of file diff --git a/src/PluginSdkBinding/Transforms/EnumMethods.xml b/src/PluginSdkBinding/Transforms/EnumMethods.xml index 49216c618..85202262a 100644 --- a/src/PluginSdkBinding/Transforms/EnumMethods.xml +++ b/src/PluginSdkBinding/Transforms/EnumMethods.xml @@ -1,13 +1,3 @@  - + \ No newline at end of file diff --git a/src/PluginSdkBinding/Transforms/Metadata.xml b/src/PluginSdkBinding/Transforms/Metadata.xml index 2587ddc4d..8c5037952 100644 --- a/src/PluginSdkBinding/Transforms/Metadata.xml +++ b/src/PluginSdkBinding/Transforms/Metadata.xml @@ -1,9 +1,3 @@ - - + + diff --git a/src/ProtoBuf/Licence.txt b/src/ProtoBuf/Licence.txt deleted file mode 100644 index 692cf3bac..000000000 --- a/src/ProtoBuf/Licence.txt +++ /dev/null @@ -1,20 +0,0 @@ -The core Protocol Buffers technology is provided courtesy of Google. -At the time of writing, this is released under the BSD license. -Full details can be found here: - -http://code.google.com/p/protobuf/ - - -This .NET implementation is Copyright 2008 Marc Gravell - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/src/ProtoBuf/Readme.txt b/src/ProtoBuf/Readme.txt deleted file mode 100644 index 51b18fd55..000000000 --- a/src/ProtoBuf/Readme.txt +++ /dev/null @@ -1,2 +0,0 @@ -The contents of this folder were generated by compiling the protobuf-net_MonoDroid project -from the http://code.google.com/p/protobuf-net source code \ No newline at end of file diff --git a/src/ProtoBuf/protobuf-net.dll b/src/ProtoBuf/protobuf-net.dll deleted file mode 100644 index dc79fd0af..000000000 Binary files a/src/ProtoBuf/protobuf-net.dll and /dev/null differ diff --git a/src/ProtoBuf/protobuf-net.pdb b/src/ProtoBuf/protobuf-net.pdb deleted file mode 100644 index 6c841feb2..000000000 Binary files a/src/ProtoBuf/protobuf-net.pdb and /dev/null differ diff --git a/src/TwofishCipher/Crypto/Twofish.cs b/src/TwofishCipher/Crypto/Twofish.cs deleted file mode 100644 index db054e47d..000000000 --- a/src/TwofishCipher/Crypto/Twofish.cs +++ /dev/null @@ -1,121 +0,0 @@ -/* - A C# implementation of the Twofish cipher - By Shaun Wilde - - An article on integrating a C# implementation of the Twofish cipher into the - .NET framework. - - http://www.codeproject.com/KB/recipes/twofish_csharp.aspx - - The Code Project Open License (CPOL) 1.02 - http://www.codeproject.com/info/cpol10.aspx - - Download a copy of the CPOL. - http://www.codeproject.com/info/CPOL.zip -*/ - -using System; -using System.Diagnostics; -using System.Security.Cryptography; - -namespace TwofishCipher.Crypto -{ - /// - /// Summary description for Twofish encryption algorithm of which more information can be found at http://www.counterpane.com/twofish.html. - /// This is based on the MS cryptographic framework and can therefore be used in place of the RijndaelManaged classes - /// provided by MS in System.Security.Cryptography and the other related classes - /// - public sealed class Twofish : SymmetricAlgorithm - { - /// - /// This is the Twofish constructor. - /// - public Twofish() - { - this.LegalKeySizesValue = new KeySizes[]{new KeySizes(128,256,64)}; // this allows us to have 128,192,256 key sizes - - this.LegalBlockSizesValue = new KeySizes[]{new KeySizes(128,128,0)}; // this is in bits - typical of MS - always 16 bytes - - this.BlockSize = 128; // set this to 16 bytes we cannot have any other value - this.KeySize = 128; // in bits - this can be changed to 128,192,256 - - this.Padding = PaddingMode.Zeros; - - this.Mode = CipherMode.ECB; - - } - - /// - /// Creates an object that supports ICryptoTransform that can be used to encrypt data using the Twofish encryption algorithm. - /// - /// A byte array that contains a key. The length of this key should be equal to the KeySize property - /// A byte array that contains an initialization vector. The length of this IV should be equal to the BlockSize property - public override ICryptoTransform CreateEncryptor(byte[] key, byte[] iv) - { - Key = key; // this appears to make a new copy - - if (Mode == CipherMode.CBC) - IV = iv; - - return new TwofishEncryption(KeySize, ref KeyValue, ref IVValue, ModeValue, TwofishBase.EncryptionDirection.Encrypting); - } - - /// - /// Creates an object that supports ICryptoTransform that can be used to decrypt data using the Twofish encryption algorithm. - /// - /// A byte array that contains a key. The length of this key should be equal to the KeySize property - /// A byte array that contains an initialization vector. The length of this IV should be equal to the BlockSize property - public override ICryptoTransform CreateDecryptor(byte[] key, byte[] iv) - { - Key = key; - - if (Mode == CipherMode.CBC) - IV = iv; - - return new TwofishEncryption(KeySize, ref KeyValue, ref IVValue, ModeValue, TwofishBase.EncryptionDirection.Decrypting); - } - - /// - /// Generates a random initialization Vector (IV). - /// - public override void GenerateIV() - { - IV = new byte[16]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; - } - - /// - /// Generates a random Key. This is only really useful in testing scenarios. - /// - public override void GenerateKey() - { - Key = new byte[KeySize/8]; - - // set the array to all 0 - implement a random key generation mechanism later probably based on PRNG - for (int i=Key.GetLowerBound(0);i - /// Override the Set method on this property so that we only support CBC and EBC - /// - public override CipherMode Mode - { - set - { - switch (value) - { - case CipherMode.CBC: - break; - case CipherMode.ECB: - break; - default: - throw (new CryptographicException("Specified CipherMode is not supported.")); - } - this.ModeValue = value; - } - } - - } -} diff --git a/src/TwofishCipher/Crypto/TwofishBase.cs b/src/TwofishCipher/Crypto/TwofishBase.cs deleted file mode 100644 index a29a91485..000000000 --- a/src/TwofishCipher/Crypto/TwofishBase.cs +++ /dev/null @@ -1,641 +0,0 @@ -/* - A C# implementation of the Twofish cipher - By Shaun Wilde - - An article on integrating a C# implementation of the Twofish cipher into the - .NET framework. - - http://www.codeproject.com/KB/recipes/twofish_csharp.aspx - - The Code Project Open License (CPOL) 1.02 - http://www.codeproject.com/info/cpol10.aspx - - Download a copy of the CPOL. - http://www.codeproject.com/info/CPOL.zip -*/ - -//#define FEISTEL - -using System; -using System.Diagnostics; -using System.Security.Cryptography; - -namespace TwofishCipher.Crypto -{ - - /// - /// Summary description for TwofishBase. - /// - internal class TwofishBase - { - public enum EncryptionDirection - { - Encrypting, - Decrypting - } - - public TwofishBase() - { - } - - protected int inputBlockSize = BLOCK_SIZE/8; - protected int outputBlockSize = BLOCK_SIZE/8; - - /* - +***************************************************************************** - * - * Function Name: f32 - * - * Function: Run four bytes through keyed S-boxes and apply MDS matrix - * - * Arguments: x = input to f function - * k32 = pointer to key dwords - * keyLen = total key length (k32 --> keyLey/2 bits) - * - * Return: The output of the keyed permutation applied to x. - * - * Notes: - * This function is a keyed 32-bit permutation. It is the major building - * block for the Twofish round function, including the four keyed 8x8 - * permutations and the 4x4 MDS matrix multiply. This function is used - * both for generating round subkeys and within the round function on the - * block being encrypted. - * - * This version is fairly slow and pedagogical, although a smartcard would - * probably perform the operation exactly this way in firmware. For - * ultimate performance, the entire operation can be completed with four - * lookups into four 256x32-bit tables, with three dword xors. - * - * The MDS matrix is defined in TABLE.H. To multiply by Mij, just use the - * macro Mij(x). - * - -****************************************************************************/ - private static uint f32(uint x,ref uint[] k32,int keyLen) - { - byte[] b = {b0(x),b1(x),b2(x),b3(x)}; - - /* Run each byte thru 8x8 S-boxes, xoring with key byte at each stage. */ - /* Note that each byte goes through a different combination of S-boxes.*/ - - //*((DWORD *)b) = Bswap(x); /* make b[0] = LSB, b[3] = MSB */ - switch (((keyLen + 63)/64) & 3) - { - case 0: /* 256 bits of key */ - b[0] = (byte)(P8x8[P_04,b[0]] ^ b0(k32[3])); - b[1] = (byte)(P8x8[P_14,b[1]] ^ b1(k32[3])); - b[2] = (byte)(P8x8[P_24,b[2]] ^ b2(k32[3])); - b[3] = (byte)(P8x8[P_34,b[3]] ^ b3(k32[3])); - /* fall thru, having pre-processed b[0]..b[3] with k32[3] */ - goto case 3; - case 3: /* 192 bits of key */ - b[0] = (byte)(P8x8[P_03,b[0]] ^ b0(k32[2])); - b[1] = (byte)(P8x8[P_13,b[1]] ^ b1(k32[2])); - b[2] = (byte)(P8x8[P_23,b[2]] ^ b2(k32[2])); - b[3] = (byte)(P8x8[P_33,b[3]] ^ b3(k32[2])); - /* fall thru, having pre-processed b[0]..b[3] with k32[2] */ - goto case 2; - case 2: /* 128 bits of key */ - b[0] = P8x8[P_00, P8x8[P_01, P8x8[P_02, b[0]] ^ b0(k32[1])] ^ b0(k32[0])]; - b[1] = P8x8[P_10, P8x8[P_11, P8x8[P_12, b[1]] ^ b1(k32[1])] ^ b1(k32[0])]; - b[2] = P8x8[P_20, P8x8[P_21, P8x8[P_22, b[2]] ^ b2(k32[1])] ^ b2(k32[0])]; - b[3] = P8x8[P_30, P8x8[P_31, P8x8[P_32, b[3]] ^ b3(k32[1])] ^ b3(k32[0])]; - break; - } - - - /* Now perform the MDS matrix multiply inline. */ - return (uint)((M00(b[0]) ^ M01(b[1]) ^ M02(b[2]) ^ M03(b[3]))) ^ - (uint)((M10(b[0]) ^ M11(b[1]) ^ M12(b[2]) ^ M13(b[3])) << 8) ^ - (uint)((M20(b[0]) ^ M21(b[1]) ^ M22(b[2]) ^ M23(b[3])) << 16) ^ - (uint)((M30(b[0]) ^ M31(b[1]) ^ M32(b[2]) ^ M33(b[3])) << 24) ; - } - - /* - +***************************************************************************** - * - * Function Name: reKey - * - * Function: Initialize the Twofish key schedule from key32 - * - * Arguments: key = ptr to keyInstance to be initialized - * - * Return: TRUE on success - * - * Notes: - * Here we precompute all the round subkeys, although that is not actually - * required. For example, on a smartcard, the round subkeys can - * be generated on-the-fly using f32() - * - -****************************************************************************/ - protected bool reKey(int keyLen, ref uint[] key32) - { - int i,k64Cnt; - keyLength = keyLen; - rounds = numRounds[(keyLen-1)/64]; - int subkeyCnt = ROUND_SUBKEYS + 2*rounds; - uint A,B; - uint[] k32e = new uint[MAX_KEY_BITS/64]; - uint[] k32o = new uint[MAX_KEY_BITS/64]; /* even/odd key dwords */ - - k64Cnt=(keyLen+63)/64; /* round up to next multiple of 64 bits */ - for (i=0;i=0;r--) /* main Twofish decryption loop */ - { - t0 = f32( x[0] ,ref sboxKeys,keyLength); - t1 = f32(ROL(x[1],8),ref sboxKeys,keyLength); - - x[2] = ROL(x[2],1); - x[2]^= t0 + t1 + subKeys[ROUND_SUBKEYS+2*r ]; /* PHT, round keys */ - x[3]^= t0 + 2*t1 + subKeys[ROUND_SUBKEYS+2*r+1]; - x[3] = ROR(x[3],1); - - if (r>0) /* unswap, except for last round */ - { - t0 = x[0]; x[0]= x[2]; x[2] = t0; - t1 = x[1]; x[1]= x[3]; x[3] = t1; - } - } - - for (int i=0;i0) ? k0 : k1; /* merge in 32 more key bits */ - for (j=0;j<4;j++) /* shift one byte at a time */ - RS_rem(ref r); - } - return r; - } - - protected uint[] sboxKeys = new uint[MAX_KEY_BITS/64]; /* key bits used for S-boxes */ - protected uint[] subKeys = new uint[TOTAL_SUBKEYS]; /* round subkeys, input/output whitening bits */ - protected uint[] Key = {0,0,0,0,0,0,0,0}; //new int[MAX_KEY_BITS/32]; - protected uint[] IV = {0,0,0,0}; // this should be one block size - private int keyLength; - private int rounds; - protected CipherMode cipherMode = CipherMode.ECB; - - - #region These are all the definitions that were found in AES.H - static private readonly int BLOCK_SIZE = 128; /* number of bits per block */ - static private readonly int MAX_ROUNDS = 16; /* max # rounds (for allocating subkey array) */ - static private readonly int ROUNDS_128 = 16; /* default number of rounds for 128-bit keys*/ - static private readonly int ROUNDS_192 = 16; /* default number of rounds for 192-bit keys*/ - static private readonly int ROUNDS_256 = 16; /* default number of rounds for 256-bit keys*/ - static private readonly int MAX_KEY_BITS = 256; /* max number of bits of key */ -// static private readonly int MIN_KEY_BITS = 128; /* min number of bits of key (zero pad) */ - -//#define VALID_SIG 0x48534946 /* initialization signature ('FISH') */ -//#define MCT_OUTER 400 /* MCT outer loop */ -//#define MCT_INNER 10000 /* MCT inner loop */ -//#define REENTRANT 1 /* nonzero forces reentrant code (slightly slower) */ - - static private readonly int INPUT_WHITEN = 0; /* subkey array indices */ - static private readonly int OUTPUT_WHITEN = (INPUT_WHITEN + BLOCK_SIZE/32); - static private readonly int ROUND_SUBKEYS = (OUTPUT_WHITEN + BLOCK_SIZE/32); /* use 2 * (# rounds) */ - static private readonly int TOTAL_SUBKEYS = (ROUND_SUBKEYS + 2*MAX_ROUNDS); - - - #endregion - - #region These are all the definitions that were found in TABLE.H that we need - /* for computing subkeys */ - static private readonly uint SK_STEP = 0x02020202u; - static private readonly uint SK_BUMP = 0x01010101u; - static private readonly int SK_ROTL = 9; - - /* Reed-Solomon code parameters: (12,8) reversible code - g(x) = x**4 + (a + 1/a) x**3 + a x**2 + (a + 1/a) x + 1 - where a = primitive root of field generator 0x14D */ - static private readonly uint RS_GF_FDBK = 0x14D; /* field generator */ - static private void RS_rem(ref uint x) - { - byte b = (byte) (x >> 24); - // TODO: maybe change g2 and g3 to bytes - uint g2 = (uint)(((b << 1) ^ (((b & 0x80)==0x80) ? RS_GF_FDBK : 0 )) & 0xFF); - uint g3 = (uint)(((b >> 1) & 0x7F) ^ (((b & 1)==1) ? RS_GF_FDBK >> 1 : 0 ) ^ g2) ; - x = (x << 8) ^ (g3 << 24) ^ (g2 << 16) ^ (g3 << 8) ^ b; - } - - /* Macros for the MDS matrix - * The MDS matrix is (using primitive polynomial 169): - * 01 EF 5B 5B - * 5B EF EF 01 - * EF 5B 01 EF - * EF 01 EF 5B - *---------------------------------------------------------------- - * More statistical properties of this matrix (from MDS.EXE output): - * - * Min Hamming weight (one byte difference) = 8. Max=26. Total = 1020. - * Prob[8]: 7 23 42 20 52 95 88 94 121 128 91 - * 102 76 41 24 8 4 1 3 0 0 0 - * Runs[8]: 2 4 5 6 7 8 9 11 - * MSBs[8]: 1 4 15 8 18 38 40 43 - * HW= 8: 05040705 0A080E0A 14101C14 28203828 50407050 01499101 A080E0A0 - * HW= 9: 04050707 080A0E0E 10141C1C 20283838 40507070 80A0E0E0 C6432020 07070504 - * 0E0E0A08 1C1C1410 38382820 70705040 E0E0A080 202043C6 05070407 0A0E080E - * 141C101C 28382038 50704070 A0E080E0 4320C620 02924B02 089A4508 - * Min Hamming weight (two byte difference) = 3. Max=28. Total = 390150. - * Prob[3]: 7 18 55 149 270 914 2185 5761 11363 20719 32079 - * 43492 51612 53851 52098 42015 31117 20854 11538 6223 2492 1033 - * MDS OK, ROR: 6+ 7+ 8+ 9+ 10+ 11+ 12+ 13+ 14+ 15+ 16+ - * 17+ 18+ 19+ 20+ 21+ 22+ 23+ 24+ 25+ 26+ - */ - static private readonly int MDS_GF_FDBK = 0x169; /* primitive polynomial for GF(256)*/ - static private int LFSR1(int x) - { - return ( ((x) >> 1) ^ ((((x) & 0x01)==0x01) ? MDS_GF_FDBK/2 : 0)); - } - - static private int LFSR2(int x) - { - return ( ((x) >> 2) ^ ((((x) & 0x02)==0x02) ? MDS_GF_FDBK/2 : 0) ^ - ((((x) & 0x01)==0x01) ? MDS_GF_FDBK/4 : 0)); - } - - // TODO: not the most efficient use of code but it allows us to update the code a lot quicker we can possibly optimize this code once we have got it all working - static private int Mx_1(int x) - { - return x; /* force result to int so << will work */ - } - - static private int Mx_X(int x) - { - return x ^ LFSR2(x); /* 5B */ - } - - static private int Mx_Y(int x) - { - return x ^ LFSR1(x) ^ LFSR2(x); /* EF */ - } - - static private int M00(int x) - { - return Mul_1(x); - } - static private int M01(int x) - { - return Mul_Y(x); - } - static private int M02(int x) - { - return Mul_X(x); - } - static private int M03(int x) - { - return Mul_X(x); - } - - static private int M10(int x) - { - return Mul_X(x); - } - static private int M11(int x) - { - return Mul_Y(x); - } - static private int M12(int x) - { - return Mul_Y(x); - } - static private int M13(int x) - { - return Mul_1(x); - } - - static private int M20(int x) - { - return Mul_Y(x); - } - static private int M21(int x) - { - return Mul_X(x); - } - static private int M22(int x) - { - return Mul_1(x); - } - static private int M23(int x) - { - return Mul_Y(x); - } - - static private int M30(int x) - { - return Mul_Y(x); - } - static private int M31(int x) - { - return Mul_1(x); - } - static private int M32(int x) - { - return Mul_Y(x); - } - static private int M33(int x) - { - return Mul_X(x); - } - - static private int Mul_1(int x) - { - return Mx_1(x); - } - static private int Mul_X(int x) - { - return Mx_X(x); - } - static private int Mul_Y(int x) - { - return Mx_Y(x); - } - /* Define the fixed p0/p1 permutations used in keyed S-box lookup. - By changing the following constant definitions for P_ij, the S-boxes will - automatically get changed in all the Twofish source code. Note that P_i0 is - the "outermost" 8x8 permutation applied. See the f32() function to see - how these constants are to be used. - */ - static private readonly int P_00 = 1; /* "outermost" permutation */ - static private readonly int P_01 = 0; - static private readonly int P_02 = 0; - static private readonly int P_03 = (P_01^1); /* "extend" to larger key sizes */ - static private readonly int P_04 = 1; - - static private readonly int P_10 = 0; - static private readonly int P_11 = 0; - static private readonly int P_12 = 1; - static private readonly int P_13 = (P_11^1); - static private readonly int P_14 = 0; - - static private readonly int P_20 = 1; - static private readonly int P_21 = 1; - static private readonly int P_22 = 0; - static private readonly int P_23 = (P_21^1); - static private readonly int P_24 = 0; - - static private readonly int P_30 = 0; - static private readonly int P_31 = 1; - static private readonly int P_32 = 1; - static private readonly int P_33 = (P_31^1); - static private readonly int P_34 = 1; - - /* fixed 8x8 permutation S-boxes */ - - /*********************************************************************** - * 07:07:14 05/30/98 [4x4] TestCnt=256. keySize=128. CRC=4BD14D9E. - * maxKeyed: dpMax = 18. lpMax =100. fixPt = 8. skXor = 0. skDup = 6. - * log2(dpMax[ 6..18])= --- 15.42 1.33 0.89 4.05 7.98 12.05 - * log2(lpMax[ 7..12])= 9.32 1.01 1.16 4.23 8.02 12.45 - * log2(fixPt[ 0.. 8])= 1.44 1.44 2.44 4.06 6.01 8.21 11.07 14.09 17.00 - * log2(skXor[ 0.. 0]) - * log2(skDup[ 0.. 6])= --- 2.37 0.44 3.94 8.36 13.04 17.99 - ***********************************************************************/ - static private byte[,] P8x8 = - { - /* p0: */ - /* dpMax = 10. lpMax = 64. cycleCnt= 1 1 1 0. */ - /* 817D6F320B59ECA4.ECB81235F4A6709D.BA5E6D90C8F32471.D7F4126E9B3085CA. */ - /* Karnaugh maps: - * 0111 0001 0011 1010. 0001 1001 1100 1111. 1001 1110 0011 1110. 1101 0101 1111 1001. - * 0101 1111 1100 0100. 1011 0101 0010 0000. 0101 1000 1100 0101. 1000 0111 0011 0010. - * 0000 1001 1110 1101. 1011 1000 1010 0011. 0011 1001 0101 0000. 0100 0010 0101 1011. - * 0111 0100 0001 0110. 1000 1011 1110 1001. 0011 0011 1001 1101. 1101 0101 0000 1100. - */ - { - 0xA9, 0x67, 0xB3, 0xE8, 0x04, 0xFD, 0xA3, 0x76, - 0x9A, 0x92, 0x80, 0x78, 0xE4, 0xDD, 0xD1, 0x38, - 0x0D, 0xC6, 0x35, 0x98, 0x18, 0xF7, 0xEC, 0x6C, - 0x43, 0x75, 0x37, 0x26, 0xFA, 0x13, 0x94, 0x48, - 0xF2, 0xD0, 0x8B, 0x30, 0x84, 0x54, 0xDF, 0x23, - 0x19, 0x5B, 0x3D, 0x59, 0xF3, 0xAE, 0xA2, 0x82, - 0x63, 0x01, 0x83, 0x2E, 0xD9, 0x51, 0x9B, 0x7C, - 0xA6, 0xEB, 0xA5, 0xBE, 0x16, 0x0C, 0xE3, 0x61, - 0xC0, 0x8C, 0x3A, 0xF5, 0x73, 0x2C, 0x25, 0x0B, - 0xBB, 0x4E, 0x89, 0x6B, 0x53, 0x6A, 0xB4, 0xF1, - 0xE1, 0xE6, 0xBD, 0x45, 0xE2, 0xF4, 0xB6, 0x66, - 0xCC, 0x95, 0x03, 0x56, 0xD4, 0x1C, 0x1E, 0xD7, - 0xFB, 0xC3, 0x8E, 0xB5, 0xE9, 0xCF, 0xBF, 0xBA, - 0xEA, 0x77, 0x39, 0xAF, 0x33, 0xC9, 0x62, 0x71, - 0x81, 0x79, 0x09, 0xAD, 0x24, 0xCD, 0xF9, 0xD8, - 0xE5, 0xC5, 0xB9, 0x4D, 0x44, 0x08, 0x86, 0xE7, - 0xA1, 0x1D, 0xAA, 0xED, 0x06, 0x70, 0xB2, 0xD2, - 0x41, 0x7B, 0xA0, 0x11, 0x31, 0xC2, 0x27, 0x90, - 0x20, 0xF6, 0x60, 0xFF, 0x96, 0x5C, 0xB1, 0xAB, - 0x9E, 0x9C, 0x52, 0x1B, 0x5F, 0x93, 0x0A, 0xEF, - 0x91, 0x85, 0x49, 0xEE, 0x2D, 0x4F, 0x8F, 0x3B, - 0x47, 0x87, 0x6D, 0x46, 0xD6, 0x3E, 0x69, 0x64, - 0x2A, 0xCE, 0xCB, 0x2F, 0xFC, 0x97, 0x05, 0x7A, - 0xAC, 0x7F, 0xD5, 0x1A, 0x4B, 0x0E, 0xA7, 0x5A, - 0x28, 0x14, 0x3F, 0x29, 0x88, 0x3C, 0x4C, 0x02, - 0xB8, 0xDA, 0xB0, 0x17, 0x55, 0x1F, 0x8A, 0x7D, - 0x57, 0xC7, 0x8D, 0x74, 0xB7, 0xC4, 0x9F, 0x72, - 0x7E, 0x15, 0x22, 0x12, 0x58, 0x07, 0x99, 0x34, - 0x6E, 0x50, 0xDE, 0x68, 0x65, 0xBC, 0xDB, 0xF8, - 0xC8, 0xA8, 0x2B, 0x40, 0xDC, 0xFE, 0x32, 0xA4, - 0xCA, 0x10, 0x21, 0xF0, 0xD3, 0x5D, 0x0F, 0x00, - 0x6F, 0x9D, 0x36, 0x42, 0x4A, 0x5E, 0xC1, 0xE0 - }, - /* p1: */ - /* dpMax = 10. lpMax = 64. cycleCnt= 2 0 0 1. */ - /* 28BDF76E31940AC5.1E2B4C376DA5F908.4C75169A0ED82B3F.B951C3DE647F208A. */ - /* Karnaugh maps: - * 0011 1001 0010 0111. 1010 0111 0100 0110. 0011 0001 1111 0100. 1111 1000 0001 1100. - * 1100 1111 1111 1010. 0011 0011 1110 0100. 1001 0110 0100 0011. 0101 0110 1011 1011. - * 0010 0100 0011 0101. 1100 1000 1000 1110. 0111 1111 0010 0110. 0000 1010 0000 0011. - * 1101 1000 0010 0001. 0110 1001 1110 0101. 0001 0100 0101 0111. 0011 1011 1111 0010. - */ - { - 0x75, 0xF3, 0xC6, 0xF4, 0xDB, 0x7B, 0xFB, 0xC8, - 0x4A, 0xD3, 0xE6, 0x6B, 0x45, 0x7D, 0xE8, 0x4B, - 0xD6, 0x32, 0xD8, 0xFD, 0x37, 0x71, 0xF1, 0xE1, - 0x30, 0x0F, 0xF8, 0x1B, 0x87, 0xFA, 0x06, 0x3F, - 0x5E, 0xBA, 0xAE, 0x5B, 0x8A, 0x00, 0xBC, 0x9D, - 0x6D, 0xC1, 0xB1, 0x0E, 0x80, 0x5D, 0xD2, 0xD5, - 0xA0, 0x84, 0x07, 0x14, 0xB5, 0x90, 0x2C, 0xA3, - 0xB2, 0x73, 0x4C, 0x54, 0x92, 0x74, 0x36, 0x51, - 0x38, 0xB0, 0xBD, 0x5A, 0xFC, 0x60, 0x62, 0x96, - 0x6C, 0x42, 0xF7, 0x10, 0x7C, 0x28, 0x27, 0x8C, - 0x13, 0x95, 0x9C, 0xC7, 0x24, 0x46, 0x3B, 0x70, - 0xCA, 0xE3, 0x85, 0xCB, 0x11, 0xD0, 0x93, 0xB8, - 0xA6, 0x83, 0x20, 0xFF, 0x9F, 0x77, 0xC3, 0xCC, - 0x03, 0x6F, 0x08, 0xBF, 0x40, 0xE7, 0x2B, 0xE2, - 0x79, 0x0C, 0xAA, 0x82, 0x41, 0x3A, 0xEA, 0xB9, - 0xE4, 0x9A, 0xA4, 0x97, 0x7E, 0xDA, 0x7A, 0x17, - 0x66, 0x94, 0xA1, 0x1D, 0x3D, 0xF0, 0xDE, 0xB3, - 0x0B, 0x72, 0xA7, 0x1C, 0xEF, 0xD1, 0x53, 0x3E, - 0x8F, 0x33, 0x26, 0x5F, 0xEC, 0x76, 0x2A, 0x49, - 0x81, 0x88, 0xEE, 0x21, 0xC4, 0x1A, 0xEB, 0xD9, - 0xC5, 0x39, 0x99, 0xCD, 0xAD, 0x31, 0x8B, 0x01, - 0x18, 0x23, 0xDD, 0x1F, 0x4E, 0x2D, 0xF9, 0x48, - 0x4F, 0xF2, 0x65, 0x8E, 0x78, 0x5C, 0x58, 0x19, - 0x8D, 0xE5, 0x98, 0x57, 0x67, 0x7F, 0x05, 0x64, - 0xAF, 0x63, 0xB6, 0xFE, 0xF5, 0xB7, 0x3C, 0xA5, - 0xCE, 0xE9, 0x68, 0x44, 0xE0, 0x4D, 0x43, 0x69, - 0x29, 0x2E, 0xAC, 0x15, 0x59, 0xA8, 0x0A, 0x9E, - 0x6E, 0x47, 0xDF, 0x34, 0x35, 0x6A, 0xCF, 0xDC, - 0x22, 0xC9, 0xC0, 0x9B, 0x89, 0xD4, 0xED, 0xAB, - 0x12, 0xA2, 0x0D, 0x52, 0xBB, 0x02, 0x2F, 0xA9, - 0xD7, 0x61, 0x1E, 0xB4, 0x50, 0x04, 0xF6, 0xC2, - 0x16, 0x25, 0x86, 0x56, 0x55, 0x09, 0xBE, 0x91 - } - }; - #endregion - - #region These are all the definitions that were found in PLATFORM.H that we need - // left rotation - private static uint ROL(uint x, int n) - { - return ( ((x) << ((n) & 0x1F)) | (x) >> (32-((n) & 0x1F)) ); - } - - // right rotation - private static uint ROR(uint x,int n) - { - return (((x) >> ((n) & 0x1F)) | ((x) << (32-((n) & 0x1F)))); - } - - // first byte - protected static byte b0(uint x) - { - return (byte)(x );//& 0xFF); - } - // second byte - protected static byte b1(uint x) - { - return (byte)((x >> 8));// & (0xFF)); - } - // third byte - protected static byte b2(uint x) - { - return (byte)((x >> 16));// & (0xFF)); - } - // fourth byte - protected static byte b3(uint x) - { - return (byte)((x >> 24));// & (0xFF)); - } - - #endregion - } -} diff --git a/src/TwofishCipher/Crypto/TwofishEncryption.cs b/src/TwofishCipher/Crypto/TwofishEncryption.cs deleted file mode 100644 index 4f2a23070..000000000 --- a/src/TwofishCipher/Crypto/TwofishEncryption.cs +++ /dev/null @@ -1,193 +0,0 @@ -/* - A C# implementation of the Twofish cipher - By Shaun Wilde - - An article on integrating a C# implementation of the Twofish cipher into the - .NET framework. - - http://www.codeproject.com/KB/recipes/twofish_csharp.aspx - - The Code Project Open License (CPOL) 1.02 - http://www.codeproject.com/info/cpol10.aspx - - Download a copy of the CPOL. - http://www.codeproject.com/info/CPOL.zip -*/ - -using System; -using System.Diagnostics; -using System.Security.Cryptography; - -namespace TwofishCipher.Crypto -{ - /// - /// Summary description for TwofishEncryption. - /// - internal class TwofishEncryption : TwofishBase, ICryptoTransform - { - public TwofishEncryption(int keyLen, ref byte[] key, ref byte[] iv, CipherMode cMode, EncryptionDirection direction) - { - // convert our key into an array of ints - for (int i=0;i - /// Transform a block depending on whether we are encrypting or decrypting - /// - /// - /// - /// - /// - /// - /// - public int TransformBlock( - byte[] inputBuffer, - int inputOffset, - int inputCount, - byte[] outputBuffer, - int outputOffset - ) - { - uint[] x=new uint[4]; - - // load it up - for (int i=0;i<4;i++) - { - x[i]= (uint)(inputBuffer[i*4+3+inputOffset]<<24) | (uint)(inputBuffer[i*4+2+inputOffset] << 16) | - (uint)(inputBuffer[i*4+1+inputOffset] << 8) | (uint)(inputBuffer[i*4+0+inputOffset]); - - } - - if (encryptionDirection == EncryptionDirection.Encrypting) - { - blockEncrypt(ref x); - } - else - { - blockDecrypt(ref x); - } - - - // load it up - for (int i=0;i<4;i++) - { - outputBuffer[i*4+0+outputOffset] = b0(x[i]); - outputBuffer[i*4+1+outputOffset] = b1(x[i]); - outputBuffer[i*4+2+outputOffset] = b2(x[i]); - outputBuffer[i*4+3+outputOffset] = b3(x[i]); - } - - - return inputCount; - } - - public byte[] TransformFinalBlock( - byte[] inputBuffer, - int inputOffset, - int inputCount - ) - { - byte[] outputBuffer;// = new byte[0]; - - if (inputCount>0) - { - outputBuffer = new byte[16]; // blocksize - uint[] x=new uint[4]; - - // load it up - for (int i=0;i<4;i++) // should be okay as we have already said to pad with zeros - { - x[i]= (uint)(inputBuffer[i*4+3+inputOffset]<<24) | (uint)(inputBuffer[i*4+2+inputOffset] << 16) | - (uint)(inputBuffer[i*4+1+inputOffset] << 8) | (uint)(inputBuffer[i*4+0+inputOffset]); - - } - - if (encryptionDirection == EncryptionDirection.Encrypting) - { - blockEncrypt(ref x); - } - else - { - blockDecrypt(ref x); - } - - // load it up - for (int i=0;i<4;i++) - { - outputBuffer[i*4+0] = b0(x[i]); - outputBuffer[i*4+1] = b1(x[i]); - outputBuffer[i*4+2] = b2(x[i]); - outputBuffer[i*4+3] = b3(x[i]); - } - } - else - { - outputBuffer = new byte[0]; // the .NET framework doesn't like it if you return null - this calms it down - } - - return outputBuffer; - } - - // not worked out this property yet - placing break points here just don't get caught. - private bool canReuseTransform = true; - public bool CanReuseTransform - { - get - { - return canReuseTransform; - } - } - - // I normally set this to false when block encrypting so that I can work on one block at a time - // but for compression and stream type ciphers this can be set to true so that you get all the data - private bool canTransformMultipleBlocks = false; - public bool CanTransformMultipleBlocks - { - get - { - return canTransformMultipleBlocks; - } - } - - public int InputBlockSize - { - get - { - return inputBlockSize; - } - } - - public int OutputBlockSize - { - get - { - return outputBlockSize; - } - } - - private EncryptionDirection encryptionDirection; - } -} diff --git a/src/TwofishCipher/License.txt b/src/TwofishCipher/License.txt deleted file mode 100644 index 94a9ed024..000000000 --- a/src/TwofishCipher/License.txt +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/src/TwofishCipher/Properties/AssemblyInfo.cs b/src/TwofishCipher/Properties/AssemblyInfo.cs deleted file mode 100644 index cb31f7380..000000000 --- a/src/TwofishCipher/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using Android.App; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("TwofishCipher")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("TwofishCipher")] -[assembly: AssemblyCopyright("Copyright © 2013")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] -[assembly: ComVisible(false)] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] - -[assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage)] diff --git a/src/TwofishCipher/Readme.txt b/src/TwofishCipher/Readme.txt deleted file mode 100644 index 84ff0657d..000000000 --- a/src/TwofishCipher/Readme.txt +++ /dev/null @@ -1,21 +0,0 @@ -Twofish Cipher for KeePass Password Safe -Copyright (C) 2009-2010 SEG Tech - -PREFACE - -Enables KeePass to encrypt databases using the Twofish algorithm. - -REQUIREMENTS - -This plugin requires KeePass 2.0x. - -INSTALLATION - -Just copy TwofishCipher.dll to the same directory where KeePass.exe is located -and KeePass should automatically recognize and load the plugin. - -CREDITS - -Many thanks to Dominik Reichl for creating KeePass Password Safe, without which, -this plugin would not exist. Thanks also goes to Shaun Wilde for C# -implementation of the Twofish cipher as posted on The Code Project. diff --git a/src/TwofishCipher/Resources/AboutResources.txt b/src/TwofishCipher/Resources/AboutResources.txt deleted file mode 100644 index 194ae28a5..000000000 --- a/src/TwofishCipher/Resources/AboutResources.txt +++ /dev/null @@ -1,50 +0,0 @@ -Images, layout descriptions, binary blobs and string dictionaries can be included -in your application as resource files. Various Android APIs are designed to -operate on the resource IDs instead of dealing with images, strings or binary blobs -directly. - -For example, a sample Android app that contains a user interface layout (main.xml), -an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png) -would keep its resources in the "Resources" directory of the application: - -Resources/ - drawable-hdpi/ - icon.png - - drawable-ldpi/ - icon.png - - drawable-mdpi/ - icon.png - - layout/ - main.xml - - values/ - strings.xml - -In order to get the build system to recognize Android resources, set the build action to -"AndroidResource". The native Android APIs do not operate directly with filenames, but -instead operate on resource IDs. When you compile an Android application that uses resources, -the build system will package the resources for distribution and generate a class called -"Resource" that contains the tokens for each one of the resources included. For example, -for the above Resources layout, this is what the Resource class would expose: - -public class Resource { - public class drawable { - public const int icon = 0x123; - } - - public class layout { - public const int main = 0x456; - } - - public class strings { - public const int first_string = 0xabc; - public const int second_string = 0xbcd; - } -} - -You would then use R.drawable.icon to reference the drawable/icon.png file, or Resource.layout.main -to reference the layout/main.xml file, or Resource.strings.first_string to reference the first -string in the dictionary file values/strings.xml. \ No newline at end of file diff --git a/src/TwofishCipher/TwofishCipher.csproj b/src/TwofishCipher/TwofishCipher.csproj index 9bfaafbb7..6ae180c24 100644 --- a/src/TwofishCipher/TwofishCipher.csproj +++ b/src/TwofishCipher/TwofishCipher.csproj @@ -1,84 +1,11 @@ - - + - Debug - AnyCPU - {5CF675A5-9BEE-4720-BED9-D5BF14A2EBF9} - {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - Properties - TwofishCipher - TwofishCipher - 512 - Resources\Resource.designer.cs - Off - false - v8.0 + net8.0-android + 21 + enable + enable - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - None - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - bin\ReleaseNoNet\ - TRACE - true - pdbonly - AnyCPU - prompt - MinimumRecommendedRules.ruleset - false - 4 - - - - - - - - - - - - - - - - - - - - - - - - - {545B4A6B-8BBA-4FBE-92FC-4AC060122A54} - KeePassLib2Android - + - - - + \ No newline at end of file diff --git a/src/ZlibAndroid/Resources/AboutResources.txt b/src/ZlibAndroid/Resources/AboutResources.txt deleted file mode 100644 index 54c2267a0..000000000 --- a/src/ZlibAndroid/Resources/AboutResources.txt +++ /dev/null @@ -1,44 +0,0 @@ -Images, layout descriptions, binary blobs and string dictionaries can be included -in your application as resource files. Various Android APIs are designed to -operate on the resource IDs instead of dealing with images, strings or binary blobs -directly. - -For example, a sample Android app that contains a user interface layout (main.axml), -an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png) -would keep its resources in the "Resources" directory of the application: - -Resources/ - drawable/ - icon.png - - layout/ - main.axml - - values/ - strings.xml - -In order to get the build system to recognize Android resources, set the build action to -"AndroidResource". The native Android APIs do not operate directly with filenames, but -instead operate on resource IDs. When you compile an Android application that uses resources, -the build system will package the resources for distribution and generate a class called "R" -(this is an Android convention) that contains the tokens for each one of the resources -included. For example, for the above Resources layout, this is what the R class would expose: - -public class R { - public class drawable { - public const int icon = 0x123; - } - - public class layout { - public const int main = 0x456; - } - - public class strings { - public const int first_string = 0xabc; - public const int second_string = 0xbcd; - } -} - -You would then use R.drawable.icon to reference the drawable/icon.png file, or R.layout.main -to reference the layout/main.axml file, or R.strings.first_string to reference the first -string in the dictionary file values/strings.xml. diff --git a/src/ZlibAndroid/Resources/values/Strings.xml b/src/ZlibAndroid/Resources/values/Strings.xml deleted file mode 100644 index 8d16a8876..000000000 --- a/src/ZlibAndroid/Resources/values/Strings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - ZlibAndroid - diff --git a/src/ZlibAndroid/ZlibAndroid.csproj b/src/ZlibAndroid/ZlibAndroid.csproj index 35524aa57..5b3ea69ee 100644 --- a/src/ZlibAndroid/ZlibAndroid.csproj +++ b/src/ZlibAndroid/ZlibAndroid.csproj @@ -1,75 +1,8 @@ - - + - Debug - AnyCPU - {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - {6C29A7E7-E016-4FC1-B1A0-DEE26AC711BB} - Library - ZlibAndroid - Resources\Resource.designer.cs - Resource - Resources - Assets - false - ZlibAndroid - v8.0 + net8.0-android + 21 + enable + enable - - true - full - false - bin\Debug - DEBUG; - prompt - 4 - false - None - - - full - true - bin\Release - prompt - 4 - false - false - - - bin\ReleaseNoNet\ - true - full - AnyCPU - Off - prompt - MinimumRecommendedRules.ruleset - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/java/JavaFileStorage/app/build.gradle b/src/java/JavaFileStorage/app/build.gradle index fe29146e1..939b6eddd 100644 --- a/src/java/JavaFileStorage/app/build.gradle +++ b/src/java/JavaFileStorage/app/build.gradle @@ -4,11 +4,10 @@ android { namespace 'keepass2android.javafilestorage' - compileSdkVersion 33 - defaultConfig { - minSdkVersion 15 + minSdkVersion 21 targetSdkVersion 33 + compileSdk 34 } buildTypes { release { @@ -22,6 +21,10 @@ android { sourceCompatibility 11 targetCompatibility 11 } + + packagingOptions { + exclude 'META-INF/DEPENDENCIES' + } } /* @@ -30,27 +33,21 @@ NOTE: If you change dependencies here, don't forget to update the jar files in J dependencies { - implementation 'com.squareup.okhttp3:okhttp:4.10.0-RC1' - implementation 'com.burgstaller:okhttp-digest:2.5' + implementation 'com.squareup.okhttp3:okhttp:4.12.0' + implementation 'io.github.rburgst:okhttp-digest:3.1.0' implementation 'com.google.http-client:google-http-client-gson:1.20.0' implementation('com.google.api-client:google-api-client-android:1.30.5') { 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:4.0.0' + implementation 'com.dropbox.core:dropbox-core-sdk:5.4.6' implementation 'com.google.api-client:google-api-client:1.30.5' implementation 'com.google.api-client:google-api-client-android:1.30.5' implementation 'com.google.android.gms:play-services-auth:20.4.0' - //onedrive: - implementation('com.onedrive.sdk:onedrive-sdk-android:1.2.0') { - transitive = false - } implementation 'com.pcloud.sdk:java-core:1.9.1' implementation 'com.pcloud.sdk:android:1.9.1' implementation 'com.google.code.gson:gson:2.8.6' - implementation 'com.microsoft.services.msa:msa-auth:0.8.6' - implementation 'com.microsoft.aad:adal:1.14.0' } diff --git a/src/java/JavaFileStorage/app/src/main/java/keepass2android/javafilestorage/OneDriveStorage.java b/src/java/JavaFileStorage/app/src/main/java/keepass2android/javafilestorage/OneDriveStorage.java deleted file mode 100644 index c9255efcf..000000000 --- a/src/java/JavaFileStorage/app/src/main/java/keepass2android/javafilestorage/OneDriveStorage.java +++ /dev/null @@ -1,436 +0,0 @@ -package keepass2android.javafilestorage; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.os.AsyncTask; -import android.os.Bundle; -import androidx.annotation.NonNull; -import android.util.Log; - -import com.onedrive.sdk.core.DefaultClientConfig; -import com.onedrive.sdk.core.IClientConfig; -import com.onedrive.sdk.core.OneDriveErrorCodes; -import com.onedrive.sdk.extensions.IItemCollectionPage; -import com.onedrive.sdk.extensions.IItemCollectionRequestBuilder; -import com.onedrive.sdk.extensions.IOneDriveClient; -import com.onedrive.sdk.extensions.Item; -import com.onedrive.sdk.extensions.OneDriveClient; -import com.onedrive.sdk.http.OneDriveServiceException; - -import java.io.FileNotFoundException; -import java.io.InputStream; -import java.io.UnsupportedEncodingException; -import java.util.ArrayList; -import java.util.List; - -/** - * Created by Philipp on 20.11.2016. - */ -public class OneDriveStorage extends JavaFileStorageBase -{ - final IClientConfig oneDriveConfig; - final keepass2android.javafilestorage.onedrive.MyMSAAuthenticator msaAuthenticator; - - IOneDriveClient oneDriveClient; - - public OneDriveStorage(final Context context, final String clientId) { - msaAuthenticator = new keepass2android.javafilestorage.onedrive.MyMSAAuthenticator(context) { - @Override - public String getClientId() { - return clientId; - } - - @Override - public String[] getScopes() { - return new String[] { "offline_access", "onedrive.readwrite" }; - } - }; - oneDriveConfig = DefaultClientConfig.createWithAuthenticator(msaAuthenticator); - initAuthenticator(null); - - - } - - - @Override - public boolean requiresSetup(String path) { - return !isConnected(null); - } - - @Override - public void startSelectFile(FileStorageSetupInitiatorActivity activity, boolean isForSave, int requestCode) { - - initAuthenticator((Activity)activity.getActivity()); - - String path = getProtocolId()+":///"; - Log.d("KP2AJ", "startSelectFile "+path+", connected: "+path); - if (isConnected(null)) - { - Intent intent = new Intent(); - intent.putExtra(EXTRA_IS_FOR_SAVE, isForSave); - intent.putExtra(EXTRA_PATH, path); - activity.onImmediateResult(requestCode, RESULT_FILECHOOSER_PREPARED, intent); - } - else - { - activity.startSelectFileProcess(path, isForSave, requestCode); - } - } - - private boolean isConnected(Activity activity) { - if (oneDriveClient == null) - { - try - { - Log.d("KP2AJ", "trying silent login"); - if (msaAuthenticator.loginSilent() != null) - { - Log.d("KP2AJ", "ok: silent login"); - - oneDriveClient = buildClient(activity); - - - } - else Log.d("KP2AJ", "trying silent login failed."); - } - catch (Exception e) - { - e.printStackTrace(); - } - } - return oneDriveClient != null; - } - - private void initAuthenticator(Activity activity) { - msaAuthenticator.init( - oneDriveConfig.getExecutors(), - oneDriveConfig.getHttpProvider(), - activity, - oneDriveConfig.getLogger()); - } - - - @Override - public void prepareFileUsage(FileStorageSetupInitiatorActivity activity, String path, int requestCode, boolean alwaysReturnSuccess) { - initAuthenticator((Activity)activity.getActivity()); - if (isConnected((Activity)activity.getActivity())) - { - Intent intent = new Intent(); - intent.putExtra(EXTRA_PATH, path); - activity.onImmediateResult(requestCode, RESULT_FILEUSAGE_PREPARED, intent); - } - else - { - activity.startFileUsageProcess(path, requestCode, alwaysReturnSuccess); - } - - } - - @Override - public String getProtocolId() { - return "onedrive"; - } - - @Override - public void prepareFileUsage(Context appContext, String path) throws UserInteractionRequiredException { - if (!isConnected(null)) - { - throw new UserInteractionRequiredException(); - } - - } - - @Override - public void onCreate(FileStorageSetupActivity activity, Bundle savedInstanceState) { - - Log.d("KP2AJ", "OnCreate"); - - } - - @Override - public void onResume(final FileStorageSetupActivity activity) { - - - - - } - - private IOneDriveClient buildClient(Activity activity) { - - return new OneDriveClient.Builder() - .fromConfig(oneDriveConfig) - .loginAndBuildClient(activity); - - } - - String getPathFromSkydrivePath(String skydrivePath) - { - String path = ""; - if (skydrivePath.equals("")) - return ""; - - String[] parts = skydrivePath.split("/"); - - for (int i = 0; i < parts.length; i++) { - String part = parts[i]; - logDebug("parsing part " + part); - int indexOfSeparator = part.lastIndexOf(NAME_ID_SEP); - if (indexOfSeparator < 0) { - // seems invalid, but we're very generous here - path += "/" + part; - continue; - } - String name = part.substring(0, indexOfSeparator); - try { - name = decode(name); - } catch (UnsupportedEncodingException e) { - // ignore - } - path += "/" + name; - } - logDebug("return " +path + ". original was " + skydrivePath); - return path; - - } - - String removeProtocol(String path) throws Exception { - if (path == null) - return null; - if (path.startsWith("skydrive")) - return getPathFromSkydrivePath(path.substring("skydrive://".length())); - return path.substring(getProtocolId().length()+3); - } - - @Override - public String getDisplayName(String path) { - - if (path == null) - return null; - if (path.startsWith("skydrive")) - return getProtocolId()+"://"+getPathFromSkydrivePath(path.substring("skydrive://".length())); - - return path; - } - - @Override - public String getFilename(String path) throws Exception { - return path.substring(path.lastIndexOf("/")+1); - } - - @Override - public boolean checkForFileChangeFast(String path, String previousFileVersion) throws Exception { - return false; - } - - @Override - public String getCurrentFileVersionFast(String path) { - return null; - } - - @Override - public InputStream openFileForRead(String path) throws Exception { - try { - path = removeProtocol(path); - logDebug("openFileForRead. Path="+path); - InputStream result = oneDriveClient.getDrive() - .getRoot() - .getItemWithPath(path) - .getContent() - .buildRequest() - .get(); - logDebug("ok"); - return result; - - } - catch (OneDriveServiceException e) - { - throw convertException(e); - } - } - - private Exception convertException(OneDriveServiceException e) { - if (e.isError(OneDriveErrorCodes.ItemNotFound)) - return new FileNotFoundException(e.getMessage()); - return e; - } - - @Override - public void uploadFile(String path, byte[] data, boolean writeTransactional) throws Exception { - try { - path = removeProtocol(path); - oneDriveClient.getDrive() - .getRoot() - .getItemWithPath(path) - .getContent() - .buildRequest() - .put(data); - } catch (OneDriveServiceException e) { - throw convertException(e); - } - } - - @Override - public String createFolder(String parentPath, String newDirName) throws Exception { - throw new Exception("not implemented."); - } - - @Override - public String createFilePath(String parentPath, String newFileName) throws Exception { - String path = parentPath; - if (!path.endsWith("/")) - path = path + "/"; - path = path + newFileName; - - return path; - } - - @Override - public List listFiles(String parentPath) throws Exception { - try { - ArrayList result = new ArrayList(); - parentPath = removeProtocol(parentPath); - IItemCollectionPage itemsPage = oneDriveClient.getDrive() - .getRoot() - .getItemWithPath(parentPath) - .getChildren() - .buildRequest() - .get(); - if (parentPath.endsWith("/")) - parentPath = parentPath.substring(0,parentPath.length()-1); - while (true) - { - List items = itemsPage.getCurrentPage(); - if (items.isEmpty()) - return result; - - for (Item i: items) - { - FileEntry e = getFileEntry(parentPath + "/" + i.name, i); - Log.d("KP2AJ", e.path); - result.add(e); - } - IItemCollectionRequestBuilder nextPageReqBuilder = itemsPage.getNextPage(); - if (nextPageReqBuilder == null) - return result; - itemsPage = nextPageReqBuilder.buildRequest().get(); - - } - } catch (OneDriveServiceException e) { - throw convertException(e); - } - } - - @NonNull - private FileEntry getFileEntry(String path, Item i) { - FileEntry e = new FileEntry(); - if (i.size != null) - e.sizeInBytes = i.size; - else if ((i.remoteItem != null) && (i.remoteItem.size != null)) - e.sizeInBytes = i.remoteItem.size; - - e.displayName = i.name; - e.canRead = e.canWrite = true; - e.path = getProtocolId() +"://"+path; - if (i.lastModifiedDateTime != null) - e.lastModifiedTime = i.lastModifiedDateTime.getTimeInMillis(); - else if ((i.remoteItem != null)&&(i.remoteItem.lastModifiedDateTime != null)) - e.lastModifiedTime = i.remoteItem.lastModifiedDateTime.getTimeInMillis(); - e.isDirectory = (i.folder != null) || ((i.remoteItem != null) && (i.remoteItem.folder != null)); - return e; - } - - @Override - public FileEntry getFileEntry(String filename) throws Exception { - try { - filename = removeProtocol(filename); - Item item = oneDriveClient.getDrive() - .getRoot() - .getItemWithPath(filename) - .buildRequest() - .get(); - return getFileEntry(filename, item); - } catch (OneDriveServiceException e) { - throw convertException(e); - } - } - - @Override - public void delete(String path) throws Exception { - try { - path = removeProtocol(path); - oneDriveClient.getDrive() - .getRoot() - .getItemWithPath(path) - .buildRequest() - .delete(); - } catch (OneDriveServiceException e) { - throw convertException(e); - } - } - - @Override - public void onStart(final FileStorageSetupActivity activity) { - Log.d("KP2AJ", "onStart"); - if (activity.getProcessName().equals(PROCESS_NAME_SELECTFILE)) - activity.getState().putString(EXTRA_PATH, activity.getPath()); - - JavaFileStorage.FileStorageSetupActivity storageSetupAct = activity; - - if (oneDriveClient != null) { - Log.d("KP2AJ", "auth successful"); - try { - - finishActivityWithSuccess(activity); - return; - - } catch (Exception e) { - Log.d("KP2AJ", "finish with error: " + e.toString()); - finishWithError(activity, e); - return; - } - } - - - { - Log.d("KP2AJ", "Starting auth"); - new AsyncTask() { - - @Override - protected Object doInBackground(Object... params) { - try { - return buildClient((Activity) activity); - } catch (Exception e) { - return null; - } - } - - @Override - protected void onPostExecute(Object o) { - if (o == null) - { - Log.i(TAG, "authenticating not successful"); - Intent data = new Intent(); - data.putExtra(EXTRA_ERROR_MESSAGE, "authenticating not succesful"); - ((Activity)activity).setResult(Activity.RESULT_CANCELED, data); - ((Activity)activity).finish(); - - } - else - { - Log.i(TAG, "authenticating successful"); - - oneDriveClient = (IOneDriveClient) o; - finishActivityWithSuccess(activity); - } - } - }.execute(); - - } - } - - @Override - public void onActivityResult(FileStorageSetupActivity activity, int requestCode, int resultCode, Intent data) { - - } -} diff --git a/src/java/JavaFileStorage/app/src/main/java/keepass2android/javafilestorage/onedrive/MyMSAAccountInfo.java b/src/java/JavaFileStorage/app/src/main/java/keepass2android/javafilestorage/onedrive/MyMSAAccountInfo.java deleted file mode 100644 index 42f4ac773..000000000 --- a/src/java/JavaFileStorage/app/src/main/java/keepass2android/javafilestorage/onedrive/MyMSAAccountInfo.java +++ /dev/null @@ -1,102 +0,0 @@ -package keepass2android.javafilestorage.onedrive; - -/** - * Created by Philipp on 22.11.2016. - */ - -import com.microsoft.services.msa.LiveConnectSession; -import com.onedrive.sdk.authentication.AccountType; -import com.onedrive.sdk.authentication.IAccountInfo; -import com.onedrive.sdk.authentication.MSAAccountInfo; -import com.onedrive.sdk.authentication.MSAAuthenticator; -import com.onedrive.sdk.logger.ILogger; - -import com.microsoft.services.msa.LiveConnectSession; -import com.onedrive.sdk.logger.ILogger; - -/** - * Account information for a MSA based account. - */ -public class MyMSAAccountInfo implements IAccountInfo { - - /** - * The service root for the OneDrive personal API. - */ - public static final String ONE_DRIVE_PERSONAL_SERVICE_ROOT = "https://api.onedrive.com/v1.0"; - - /** - * The authenticator that can refresh this account. - */ - private final MyMSAAuthenticator mAuthenticator; - - /** - * The session this account is based off of. - */ - private LiveConnectSession mSession; - - /** - * The logger. - */ - private final ILogger mLogger; - - /** - * Creates an MSAAccountInfo object. - * @param authenticator The authenticator that this account info was created from. - * @param liveConnectSession The session this account is based off of. - * @param logger The logger. - */ - public MyMSAAccountInfo(final MyMSAAuthenticator authenticator, - final LiveConnectSession liveConnectSession, - final ILogger logger) { - mAuthenticator = authenticator; - mSession = liveConnectSession; - mLogger = logger; - } - - /** - * Get the type of the account. - * @return The MicrosoftAccount account type. - */ - @Override - public AccountType getAccountType() { - return AccountType.MicrosoftAccount; - } - - /** - * Get the access token for requests against the service root. - * @return The access token for requests against the service root. - */ - @Override - public String getAccessToken() { - return mSession.getAccessToken(); - } - - /** - * Get the OneDrive service root for this account. - * @return the OneDrive service root for this account. - */ - @Override - public String getServiceRoot() { - return ONE_DRIVE_PERSONAL_SERVICE_ROOT; - } - - /** - * Indicates if the account access token is expired and needs to be refreshed. - * @return true if refresh() needs to be called and - * false if the account is still valid. - */ - @Override - public boolean isExpired() { - return mSession.isExpired(); - } - - /** - * Refreshes the authentication token for this account info. - */ - @Override - public void refresh() { - mLogger.logDebug("Refreshing access token..."); - final MyMSAAccountInfo newInfo = (MyMSAAccountInfo)mAuthenticator.loginSilent(); - mSession = newInfo.mSession; - } -} diff --git a/src/java/JavaFileStorage/app/src/main/java/keepass2android/javafilestorage/onedrive/MyMSAAuthenticator.java b/src/java/JavaFileStorage/app/src/main/java/keepass2android/javafilestorage/onedrive/MyMSAAuthenticator.java deleted file mode 100644 index 817af29dd..000000000 --- a/src/java/JavaFileStorage/app/src/main/java/keepass2android/javafilestorage/onedrive/MyMSAAuthenticator.java +++ /dev/null @@ -1,446 +0,0 @@ -package keepass2android.javafilestorage.onedrive; - -/** - * Created by Philipp on 22.11.2016. - */ -import android.app.Activity; -import android.content.Context; -import android.content.SharedPreferences; -import android.util.Log; - -import com.microsoft.onedrivesdk.BuildConfig; -import com.microsoft.services.msa.LiveAuthClient; -import com.microsoft.services.msa.LiveAuthException; -import com.microsoft.services.msa.LiveAuthListener; -import com.microsoft.services.msa.LiveConnectSession; -import com.microsoft.services.msa.LiveStatus; -import com.onedrive.sdk.authentication.ClientAuthenticatorException; -import com.onedrive.sdk.authentication.IAccountInfo; -import com.onedrive.sdk.authentication.IAuthenticator; -import com.onedrive.sdk.authentication.MSAAccountInfo; -import com.onedrive.sdk.concurrency.ICallback; -import com.onedrive.sdk.core.ClientException; -import com.onedrive.sdk.concurrency.SimpleWaiter; -import com.onedrive.sdk.concurrency.IExecutors; -import com.onedrive.sdk.core.OneDriveErrorCodes; -import com.onedrive.sdk.http.IHttpProvider; -import com.onedrive.sdk.logger.ILogger; - -import java.security.InvalidParameterException; -import java.util.Arrays; -import java.util.concurrent.atomic.AtomicReference; - -/** - * Wrapper around the MSA authentication library. - * https://github.com/MSOpenTech/msa-auth-for-android - */ -@SuppressWarnings("ThrowableResultOfMethodCallIgnored") -public abstract class MyMSAAuthenticator implements IAuthenticator { - - private final Context mContext; - - public MyMSAAuthenticator(Context context) - { - mContext = context; - } - - /** - * The sign in cancellation message. - */ - private static final String SIGN_IN_CANCELLED_MESSAGE = "The user cancelled the login operation."; - - /** - * The preferences for this authenticator. - */ - private static final String MSA_AUTHENTICATOR_PREFS = "MSAAuthenticatorPrefs"; - - /** - * The key for the user id. - */ - private static final String USER_ID_KEY = "userId"; - - /** - * The key for the version code - */ - public static final String VERSION_CODE_KEY = "versionCode"; - - /** - * The default user id - */ - private static final String DEFAULT_USER_ID = "@@defaultUser"; - - /** - * The active user id. - */ - private final AtomicReference mUserId = new AtomicReference<>(); - - /** - * The executors. - */ - private IExecutors mExecutors; - - /** - * Indicates whether this authenticator has been initialized. - */ - private boolean mInitialized; - - /** - * The context UI interactions should happen with. - */ - private Activity mActivity; - - /** - * The logger. - */ - private ILogger mLogger; - - /** - * The client id for this authenticator. - * https://dev.onedrive.com/auth/msa_oauth.htm#to-register-your-app - * @return The client id. - */ - public abstract String getClientId(); - - /** - * The scopes for this application. - * https://dev.onedrive.com/auth/msa_oauth.htm#authentication-scopes - * @return The scopes for this application. - */ - public abstract String[] getScopes(); - - /** - * The live authentication client. - */ - private LiveAuthClient mAuthClient; - - /** - * Initializes the authenticator. - * @param executors The executors to schedule foreground and background tasks. - * @param httpProvider The http provider for sending requests. - * @param activity The activity to create interactive UI on. - * @param logger The logger for diagnostic information. - */ - @Override - public synchronized void init(final IExecutors executors, - final IHttpProvider httpProvider, - final Activity activity, - final ILogger logger) { - mActivity = activity; - - if (mInitialized) { - return; - } - - mExecutors = executors; - mLogger = logger; - mInitialized = true; - mAuthClient = new LiveAuthClient(mContext, getClientId(), Arrays.asList(getScopes())); - - final SharedPreferences prefs = getSharedPreferences(); - mUserId.set(prefs.getString(USER_ID_KEY, null)); - } - - /** - * Starts an interactive login asynchronously. - * @param emailAddressHint The hint for the email address during the interactive login. - * @param loginCallback The callback to be called when the login is complete. - */ - @Override - public void login(final String emailAddressHint, final ICallback loginCallback) { - Log.d("KP2AJ", "login()"); - if (!mInitialized) { - throw new IllegalStateException("init must be called"); - } - - if (loginCallback == null) { - throw new InvalidParameterException("loginCallback"); - } - - mLogger.logDebug("Starting login async"); - - mExecutors.performOnBackground(new Runnable() { - @Override - public void run() { - try { - mExecutors.performOnForeground(login(emailAddressHint), loginCallback); - } catch (final ClientException e) { - mExecutors.performOnForeground(e, loginCallback); - } - } - }); - } - - /** - * Starts an interactive login. - * @param emailAddressHint The hint for the email address during the interactive login. - * @return The account info. - * @throws ClientException An exception occurs if the login was unable to complete for any reason. - */ - @Override - public synchronized IAccountInfo login(final String emailAddressHint) throws ClientException { - if (!mInitialized) { - throw new IllegalStateException("init must be called"); - } - - mLogger.logDebug("Starting login"); - - final AtomicReference error = new AtomicReference<>(); - final SimpleWaiter waiter = new SimpleWaiter(); - - final LiveAuthListener listener = new LiveAuthListener() { - @Override - public void onAuthComplete(final LiveStatus liveStatus, - final LiveConnectSession liveConnectSession, - final Object o) { - if (liveStatus == LiveStatus.NOT_CONNECTED) { - mLogger.logDebug("Received invalid login failure from silent authentication with MSA, ignoring."); - } else { - mLogger.logDebug("Successful interactive login"); - waiter.signal(); - } - } - - @Override - public void onAuthError(final LiveAuthException e, - final Object o) { - OneDriveErrorCodes code = OneDriveErrorCodes.AuthenticationFailure; - if (e.getError().equals(SIGN_IN_CANCELLED_MESSAGE)) { - code = OneDriveErrorCodes.AuthenticationCancelled; - } - - error.set(new ClientAuthenticatorException("Unable to login with MSA", e, code)); - mLogger.logError(error.get().getMessage(), error.get()); - waiter.signal(); - } - }; - - mActivity.runOnUiThread(new Runnable() { - @Override - public void run() { - mAuthClient.login(mActivity, /* scopes */null, /* user object */ null, emailAddressHint, listener); - } - }); - - mLogger.logDebug("Waiting for MSA callback"); - waiter.waitForSignal(); - - final ClientException exception = error.get(); - if (exception != null) { - throw exception; - } - - final String userId; - if (emailAddressHint != null) { - userId = emailAddressHint; - } else { - userId = DEFAULT_USER_ID; - } - - mUserId.set(userId); - - final SharedPreferences prefs = getSharedPreferences(); - prefs.edit() - .putString(USER_ID_KEY, mUserId.get()) - .putInt(VERSION_CODE_KEY, BuildConfig.VERSION_CODE) - .apply(); - - return getAccountInfo(); - } - - /** - * Starts a silent login asynchronously. - * @param loginCallback The callback to be called when the login is complete. - */ - @Override - public void loginSilent(final ICallback loginCallback) { - if (!mInitialized) { - throw new IllegalStateException("init must be called"); - } - - if (loginCallback == null) { - throw new InvalidParameterException("loginCallback"); - } - - mLogger.logDebug("Starting login silent async"); - - mExecutors.performOnBackground(new Runnable() { - @Override - public void run() { - try { - mExecutors.performOnForeground(loginSilent(), loginCallback); - } catch (final ClientException e) { - mExecutors.performOnForeground(e, loginCallback); - } - } - }); - } - - /** - * Starts a silent login. - * @return The account info. - * @throws ClientException An exception occurs if the login was unable to complete for any reason. - */ - @Override - public synchronized IAccountInfo loginSilent() throws ClientException { - if (!mInitialized) { - throw new IllegalStateException("init must be called"); - } - - mLogger.logDebug("Starting login silent"); - - final int userIdStoredMinVersion = 10112; - if (getSharedPreferences().getInt(VERSION_CODE_KEY, 0) >= userIdStoredMinVersion - && mUserId.get() == null) { - mLogger.logDebug("No login information found for silent authentication"); - return null; - } - - final SimpleWaiter loginSilentWaiter = new SimpleWaiter(); - final AtomicReference error = new AtomicReference<>(); - - final boolean waitForCallback = mAuthClient.loginSilent(new LiveAuthListener() { - @Override - public void onAuthComplete(final LiveStatus liveStatus, - final LiveConnectSession liveConnectSession, - final Object o) { - if (liveStatus == LiveStatus.NOT_CONNECTED) { - error.set(new ClientAuthenticatorException("Failed silent login, interactive login required", - OneDriveErrorCodes.AuthenticationFailure)); - mLogger.logError(error.get().getMessage(), error.get()); - } else { - mLogger.logDebug("Successful silent login"); - } - loginSilentWaiter.signal(); - } - - @Override - public void onAuthError(final LiveAuthException e, - final Object o) { - OneDriveErrorCodes code = OneDriveErrorCodes.AuthenticationFailure; - if (e.getError().equals(SIGN_IN_CANCELLED_MESSAGE)) { - code = OneDriveErrorCodes.AuthenticationCancelled; - } - - error.set(new ClientAuthenticatorException("Login silent authentication error", e, code)); - mLogger.logError(error.get().getMessage(), error.get()); - loginSilentWaiter.signal(); - } - }); - - if (!waitForCallback) { - mLogger.logDebug("MSA silent auth fast-failed"); - return null; - } - - mLogger.logDebug("Waiting for MSA callback"); - loginSilentWaiter.waitForSignal(); - final ClientException exception = error.get(); - if (exception != null) { - throw exception; - } - - return getAccountInfo(); - } - - /** - * Log the current user out. - * @param logoutCallback The callback to be called when the logout is complete. - */ - @Override - public void logout(final ICallback logoutCallback) { - if (!mInitialized) { - throw new IllegalStateException("init must be called"); - } - - if (logoutCallback == null) { - throw new InvalidParameterException("logoutCallback"); - } - - mLogger.logDebug("Starting logout async"); - - mExecutors.performOnBackground(new Runnable() { - @Override - public void run() { - try { - logout(); - mExecutors.performOnForeground((Void) null, logoutCallback); - } catch (final ClientException e) { - mExecutors.performOnForeground(e, logoutCallback); - } - } - }); - } - - /** - * Log the current user out. - * @throws ClientException An exception occurs if the logout was unable to complete for any reason. - */ - @Override - public synchronized void logout() throws ClientException { - if (!mInitialized) { - throw new IllegalStateException("init must be called"); - } - - mLogger.logDebug("Starting logout"); - - final SimpleWaiter logoutWaiter = new SimpleWaiter(); - final AtomicReference error = new AtomicReference<>(); - mAuthClient.logout(new LiveAuthListener() { - @Override - public void onAuthComplete(final LiveStatus liveStatus, - final LiveConnectSession liveConnectSession, - final Object o) { - mLogger.logDebug("Logout completed"); - logoutWaiter.signal(); - } - - @Override - public void onAuthError(final LiveAuthException e, final Object o) { - error.set(new ClientAuthenticatorException("MSA Logout failed", - e, - OneDriveErrorCodes.AuthenticationFailure)); - mLogger.logError(error.get().getMessage(), error.get()); - logoutWaiter.signal(); - } - }); - - mLogger.logDebug("Waiting for logout to complete"); - logoutWaiter.waitForSignal(); - - mLogger.logDebug("Clearing all MSA Authenticator shared preferences"); - final SharedPreferences prefs = getSharedPreferences(); - prefs.edit() - .clear() - .putInt(VERSION_CODE_KEY, BuildConfig.VERSION_CODE) - .apply(); - mUserId.set(null); - - final ClientException exception = error.get(); - if (exception != null) { - throw exception; - } - } - - /** - * Gets the current account info for this authenticator. - * @return NULL if no account is available. - */ - @Override - public IAccountInfo getAccountInfo() { - final LiveConnectSession session = mAuthClient.getSession(); - if (session == null) { - return null; - } - - return new MyMSAAccountInfo(this, session, mLogger); - } - - /** - * Gets the shared preferences for this authenticator. - * @return The shared preferences. - */ - private SharedPreferences getSharedPreferences() { - return mContext.getSharedPreferences(MSA_AUTHENTICATOR_PREFS, Context.MODE_PRIVATE); - } - -} diff --git a/src/java/JavaFileStorage/build.gradle b/src/java/JavaFileStorage/build.gradle index aaa5b1301..2318eb57c 100644 --- a/src/java/JavaFileStorage/build.gradle +++ b/src/java/JavaFileStorage/build.gradle @@ -6,7 +6,7 @@ buildscript { jcenter() } dependencies { - classpath "com.android.tools.build:gradle:7.4.0" + classpath "com.android.tools.build:gradle:8.4.0" } } diff --git a/src/java/JavaFileStorage/gradle.properties b/src/java/JavaFileStorage/gradle.properties index 6ed0f8f96..5e2afb41a 100644 --- a/src/java/JavaFileStorage/gradle.properties +++ b/src/java/JavaFileStorage/gradle.properties @@ -1 +1,2 @@ org.gradle.jvmargs=-Xmx1536m +android.useAndroidX=true diff --git a/src/java/JavaFileStorage/gradle/wrapper/gradle-wrapper.properties b/src/java/JavaFileStorage/gradle/wrapper/gradle-wrapper.properties index 416fba2d7..d8bbf7cb8 100644 --- a/src/java/JavaFileStorage/gradle/wrapper/gradle-wrapper.properties +++ b/src/java/JavaFileStorage/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip diff --git a/src/java/JavaFileStorageTest-AS/app/src/main/java/com/crocoapps/javafilestoragetest2/MainActivity.java b/src/java/JavaFileStorageTest-AS/app/src/main/java/com/crocoapps/javafilestoragetest2/MainActivity.java index 9e0bf46be..2ed8958d4 100644 --- a/src/java/JavaFileStorageTest-AS/app/src/main/java/com/crocoapps/javafilestoragetest2/MainActivity.java +++ b/src/java/JavaFileStorageTest-AS/app/src/main/java/com/crocoapps/javafilestoragetest2/MainActivity.java @@ -145,7 +145,9 @@ import java.util.List; //import keepass2android.javafilestorage.DropboxCloudRailStorage; +import keepass2android.javafilestorage.DropboxV2Storage; import keepass2android.javafilestorage.GoogleDriveAppDataFileStorage; +import keepass2android.javafilestorage.ICertificateErrorHandler; import keepass2android.javafilestorage.JavaFileStorage; import keepass2android.javafilestorage.JavaFileStorage.FileEntry; import keepass2android.javafilestorage.PCloudFileStorage; @@ -347,7 +349,7 @@ protected Void doInBackground(Object... params) { fileList = fs.listFiles(path); checkFileList(path, fileList, false, true); //second param indicates the file must be gone - Log.d("KP2AJ", "Delete a folder recursive"); + Log.d("KP2AJ", "xDelete a folder recursive: " + subfolderPath); fs.delete(subfolderPath); Log.d("KP2AJ", "List files again to check if deleting the folder was successful:"); @@ -540,12 +542,12 @@ public void run() { static JavaFileStorage createStorageToTest(Context ctx, Context appContext, boolean simulateRestart) { //storageToTest = new SftpStorage(ctx.getApplicationContext()); - storageToTest = new PCloudFileStorage(ctx, "FLm22de7bdS", "pcloud", "pcloudtest"); + //storageToTest = new PCloudFileStorage(ctx, "FLm22de7bdS", "pcloud", "pcloudtest"); //storageToTest = new SkyDriveFileStorage("000000004010C234", appContext); //storageToTest = new GoogleDriveAppDataFileStorage(); - /*storageToTest = new WebDavStorage(new ICertificateErrorHandler() { + storageToTest = new WebDavStorage(new ICertificateErrorHandler() { @Override public boolean onValidationError(String error) { return false; @@ -555,7 +557,7 @@ public boolean onValidationError(String error) { public boolean alwaysFailOnValidationError() { return false; } - });*/ + }); //storageToTest = new DropboxV2Storage(ctx,"4ybka4p4a1027n6", "1z5lv528un9nre8", !simulateRestart); //storageToTest = new DropboxFileStorage(ctx,"4ybka4p4a1027n6", "1z5lv528un9nre8", !simulateRestart); diff --git a/src/java/JavaFileStorageTest-AS/app/src/main/res/layout/webdav_credentials.xml b/src/java/JavaFileStorageTest-AS/app/src/main/res/layout/webdav_credentials.xml index 3041c796a..ea6b52d3b 100644 --- a/src/java/JavaFileStorageTest-AS/app/src/main/res/layout/webdav_credentials.xml +++ b/src/java/JavaFileStorageTest-AS/app/src/main/res/layout/webdav_credentials.xml @@ -15,7 +15,7 @@ android:layout_height="wrap_content" android:singleLine="true" android:inputType="textNoSuggestions" - android:text="https://daigers.diskstation.me:5006/Keepass2Android/Apps/Keepass2Android/" + android:text="https://webdav.hidrive.ionos.com/users/philippcro" android:hint="Server URL" /> diff --git a/src/java/JavaFileStorageTest-AS/build.gradle b/src/java/JavaFileStorageTest-AS/build.gradle index f6602f674..dd9299af5 100644 --- a/src/java/JavaFileStorageTest-AS/build.gradle +++ b/src/java/JavaFileStorageTest-AS/build.gradle @@ -7,7 +7,7 @@ buildscript { jcenter() } dependencies { - classpath "com.android.tools.build:gradle:7.4.0" + classpath "com.android.tools.build:gradle:8.4.0" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/src/java/JavaFileStorageTest-AS/gradle/wrapper/gradle-wrapper.properties b/src/java/JavaFileStorageTest-AS/gradle/wrapper/gradle-wrapper.properties index 9009fb73f..ff3d166ea 100644 --- a/src/java/JavaFileStorageTest-AS/gradle/wrapper/gradle-wrapper.properties +++ b/src/java/JavaFileStorageTest-AS/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip diff --git a/src/java/KP2AKdbLibrary/app/build.gradle b/src/java/KP2AKdbLibrary/app/build.gradle index 84d30dca8..374a3e9dd 100644 --- a/src/java/KP2AKdbLibrary/app/build.gradle +++ b/src/java/KP2AKdbLibrary/app/build.gradle @@ -4,11 +4,13 @@ android { namespace 'keepass2android.kp2akeytransform' - compileSdkVersion 33 + defaultConfig { ndk.abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64' - + minSdkVersion 21 + targetSdkVersion 34 + compileSdk 34 } diff --git a/src/java/KP2AKdbLibrary/build.gradle b/src/java/KP2AKdbLibrary/build.gradle index 51e333e49..c2945a314 100644 --- a/src/java/KP2AKdbLibrary/build.gradle +++ b/src/java/KP2AKdbLibrary/build.gradle @@ -5,7 +5,7 @@ buildscript { mavenCentral() } dependencies { - classpath "com.android.tools.build:gradle:7.4.0" + classpath "com.android.tools.build:gradle:8.4.0" } } diff --git a/src/java/KP2AKdbLibrary/gradle/wrapper/gradle-wrapper.properties b/src/java/KP2AKdbLibrary/gradle/wrapper/gradle-wrapper.properties index 37a1745a7..587bef9e4 100644 --- a/src/java/KP2AKdbLibrary/gradle/wrapper/gradle-wrapper.properties +++ b/src/java/KP2AKdbLibrary/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip diff --git a/src/java/KP2ASoftkeyboard_AS/app/build.gradle b/src/java/KP2ASoftkeyboard_AS/app/build.gradle index 179182d2f..36afd0085 100644 --- a/src/java/KP2ASoftkeyboard_AS/app/build.gradle +++ b/src/java/KP2ASoftkeyboard_AS/app/build.gradle @@ -3,10 +3,12 @@ android { namespace 'keepass2android.softkeyboard' - compileSdkVersion 33 + defaultConfig { - minSdkVersion 18 + minSdkVersion 21 + compileSdk 34 + targetSdk 34 } buildTypes { diff --git a/src/java/KP2ASoftkeyboard_AS/build.gradle b/src/java/KP2ASoftkeyboard_AS/build.gradle index 51e333e49..c2945a314 100644 --- a/src/java/KP2ASoftkeyboard_AS/build.gradle +++ b/src/java/KP2ASoftkeyboard_AS/build.gradle @@ -5,7 +5,7 @@ buildscript { mavenCentral() } dependencies { - classpath "com.android.tools.build:gradle:7.4.0" + classpath "com.android.tools.build:gradle:8.4.0" } } diff --git a/src/java/KP2ASoftkeyboard_AS/gradle/wrapper/gradle-wrapper.properties b/src/java/KP2ASoftkeyboard_AS/gradle/wrapper/gradle-wrapper.properties index da83b7b9d..7897db6c5 100644 --- a/src/java/KP2ASoftkeyboard_AS/gradle/wrapper/gradle-wrapper.properties +++ b/src/java/KP2ASoftkeyboard_AS/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip diff --git a/src/java/Keepass2AndroidPluginSDK2/app/build.gradle b/src/java/Keepass2AndroidPluginSDK2/app/build.gradle index 16a5226f4..76997922c 100644 --- a/src/java/Keepass2AndroidPluginSDK2/app/build.gradle +++ b/src/java/Keepass2AndroidPluginSDK2/app/build.gradle @@ -2,6 +2,11 @@ apply plugin: 'com.android.library' android { namespace 'keepass2android.pluginsdk' + libraryVariants.all { variant -> + variant.outputs.all { + outputFileName = "PluginSDK-${variant.name}.aar" + } + } compileSdkVersion 33 diff --git a/src/java/Keepass2AndroidPluginSDK2/app/src/main/java/keepass2android/pluginsdk/PluginAccessBroadcastReceiver.java b/src/java/Keepass2AndroidPluginSDK2/app/src/main/java/keepass2android/pluginsdk/PluginAccessBroadcastReceiver.java index 3f3d6f135..add04b208 100644 --- a/src/java/Keepass2AndroidPluginSDK2/app/src/main/java/keepass2android/pluginsdk/PluginAccessBroadcastReceiver.java +++ b/src/java/Keepass2AndroidPluginSDK2/app/src/main/java/keepass2android/pluginsdk/PluginAccessBroadcastReceiver.java @@ -2,7 +2,6 @@ import java.util.ArrayList; -import android.R.anim; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; diff --git a/src/java/Keepass2AndroidPluginSDK2/app/src/main/res/values-v11/styles.xml b/src/java/Keepass2AndroidPluginSDK2/app/src/main/res/values-v11/styles.xml deleted file mode 100644 index 3c02242ad..000000000 --- a/src/java/Keepass2AndroidPluginSDK2/app/src/main/res/values-v11/styles.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - diff --git a/src/java/Keepass2AndroidPluginSDK2/app/src/main/res/values-v14/styles.xml b/src/java/Keepass2AndroidPluginSDK2/app/src/main/res/values-v14/styles.xml deleted file mode 100644 index a91fd0372..000000000 --- a/src/java/Keepass2AndroidPluginSDK2/app/src/main/res/values-v14/styles.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - diff --git a/src/java/Keepass2AndroidPluginSDK2/app/src/main/res/values-w820dp/dimens.xml b/src/java/Keepass2AndroidPluginSDK2/app/src/main/res/values-w820dp/dimens.xml deleted file mode 100644 index f3e70203b..000000000 --- a/src/java/Keepass2AndroidPluginSDK2/app/src/main/res/values-w820dp/dimens.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - 64dp - - diff --git a/src/java/Keepass2AndroidPluginSDK2/app/src/main/res/values/dimens.xml b/src/java/Keepass2AndroidPluginSDK2/app/src/main/res/values/dimens.xml deleted file mode 100644 index 55c1e5908..000000000 --- a/src/java/Keepass2AndroidPluginSDK2/app/src/main/res/values/dimens.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - 16dp - 16dp - - diff --git a/src/java/Keepass2AndroidPluginSDK2/app/src/main/res/values/strings.xml b/src/java/Keepass2AndroidPluginSDK2/app/src/main/res/values/strings.xml deleted file mode 100644 index 5f5b75310..000000000 --- a/src/java/Keepass2AndroidPluginSDK2/app/src/main/res/values/strings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - Keepass2Android Plugin SDK - - diff --git a/src/java/Keepass2AndroidPluginSDK2/app/src/main/res/values/styles.xml b/src/java/Keepass2AndroidPluginSDK2/app/src/main/res/values/styles.xml deleted file mode 100644 index 6ce89c7ba..000000000 --- a/src/java/Keepass2AndroidPluginSDK2/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - diff --git a/src/java/Keepass2AndroidPluginSDK2/build.gradle b/src/java/Keepass2AndroidPluginSDK2/build.gradle index f1db44224..13d2ce23b 100644 --- a/src/java/Keepass2AndroidPluginSDK2/build.gradle +++ b/src/java/Keepass2AndroidPluginSDK2/build.gradle @@ -6,7 +6,7 @@ buildscript { mavenCentral() } dependencies { - classpath "com.android.tools.build:gradle:7.4.0" + classpath "com.android.tools.build:gradle:8.4.0" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/src/java/Keepass2AndroidPluginSDK2/gradle/wrapper/gradle-wrapper.properties b/src/java/Keepass2AndroidPluginSDK2/gradle/wrapper/gradle-wrapper.properties index 87321f863..993c74a72 100644 --- a/src/java/Keepass2AndroidPluginSDK2/gradle/wrapper/gradle-wrapper.properties +++ b/src/java/Keepass2AndroidPluginSDK2/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip diff --git a/src/java/PluginQR/.project b/src/java/PluginQR/.project index c47434d11..af90d9304 100644 --- a/src/java/PluginQR/.project +++ b/src/java/PluginQR/.project @@ -5,6 +5,11 @@ + + org.eclipse.buildship.core.gradleprojectbuilder + + + com.android.ide.eclipse.adt.ResourceManagerBuilder @@ -29,5 +34,17 @@ com.android.ide.eclipse.adt.AndroidNature org.eclipse.jdt.core.javanature + org.eclipse.buildship.core.gradleprojectnature + + + 1734434133027 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/src/java/android-filechooser-AS/app/build.gradle b/src/java/android-filechooser-AS/app/build.gradle index c4ee3bc53..febbfce04 100644 --- a/src/java/android-filechooser-AS/app/build.gradle +++ b/src/java/android-filechooser-AS/app/build.gradle @@ -18,6 +18,10 @@ android { debuggable false } } + + buildFeatures { + buildConfig true + } compileOptions { targetCompatibility 11 sourceCompatibility 11 diff --git a/src/java/android-filechooser-AS/build.gradle b/src/java/android-filechooser-AS/build.gradle index f1db44224..13d2ce23b 100644 --- a/src/java/android-filechooser-AS/build.gradle +++ b/src/java/android-filechooser-AS/build.gradle @@ -6,7 +6,7 @@ buildscript { mavenCentral() } dependencies { - classpath "com.android.tools.build:gradle:7.4.0" + classpath "com.android.tools.build:gradle:8.4.0" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/src/java/android-filechooser-AS/gradle/wrapper/gradle-wrapper.properties b/src/java/android-filechooser-AS/gradle/wrapper/gradle-wrapper.properties index de600804a..df4e6d423 100644 --- a/src/java/android-filechooser-AS/gradle/wrapper/gradle-wrapper.properties +++ b/src/java/android-filechooser-AS/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Tue Sep 20 20:32:06 CEST 2016 +#Tue Oct 08 15:41:22 CEST 2024 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip diff --git a/src/java/kp2akeytransform/.project b/src/java/kp2akeytransform/.project index 80cded76a..c2c119bef 100644 --- a/src/java/kp2akeytransform/.project +++ b/src/java/kp2akeytransform/.project @@ -30,4 +30,15 @@ com.android.ide.eclipse.adt.AndroidNature org.eclipse.jdt.core.javanature + + + 1734434133102 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/src/keepass2android/AboutActivity.cs b/src/keepass2android-app/AboutActivity.cs similarity index 74% rename from src/keepass2android/AboutActivity.cs rename to src/keepass2android-app/AboutActivity.cs index 11029c600..5958a3e8d 100644 --- a/src/keepass2android/AboutActivity.cs +++ b/src/keepass2android-app/AboutActivity.cs @@ -10,7 +10,7 @@ namespace keepass2android { [Activity(Label = "@string/app_name", ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.KeyboardHidden, - Theme = "@style/MyTheme_ActionBar", + Theme = "@style/Kp2aTheme_ActionBar", Exported = true)] [IntentFilter(new[] { "kp2a.action.AboutActivity" }, Categories = new[] { Intent.CategoryDefault })] public class AboutActivity: Activity, IDialogInterfaceOnDismissListener @@ -21,10 +21,7 @@ protected override void OnResume() { if ((_dialog == null) || (_dialog.IsShowing == false)) { - if (new ActivityDesign(this).UseDarkTheme) - _dialog = new AboutDialog(this, Android.Resource.Style.ThemeHoloNoActionBarFullscreen); - else - _dialog = new AboutDialog(this, Android.Resource.Style.ThemeHoloLightNoActionBarFullscreen); + _dialog = new AboutDialog(this); _dialog.SetOnDismissListener(this); _dialog.Show(); } diff --git a/src/keepass2android/AboutDialog.cs b/src/keepass2android-app/AboutDialog.cs similarity index 99% rename from src/keepass2android/AboutDialog.cs rename to src/keepass2android-app/AboutDialog.cs index e1f70884b..203a34c00 100644 --- a/src/keepass2android/AboutDialog.cs +++ b/src/keepass2android-app/AboutDialog.cs @@ -23,6 +23,7 @@ You should have received a copy of the GNU General Public License using Android.Text.Method; using Android.Widget; using Android.Content.PM; +using keepass2android; namespace keepass2android { diff --git a/src/keepass2android/ActivityLaunchMode.cs b/src/keepass2android-app/ActivityLaunchMode.cs similarity index 100% rename from src/keepass2android/ActivityLaunchMode.cs rename to src/keepass2android-app/ActivityLaunchMode.cs diff --git a/src/keepass2android/AppKilledInfo.cs b/src/keepass2android-app/AppKilledInfo.cs similarity index 89% rename from src/keepass2android/AppKilledInfo.cs rename to src/keepass2android-app/AppKilledInfo.cs index 48a846dcb..6d017bee6 100644 --- a/src/keepass2android/AppKilledInfo.cs +++ b/src/keepass2android-app/AppKilledInfo.cs @@ -9,6 +9,8 @@ using Android.Runtime; using Android.Views; using Android.Widget; +using Google.Android.Material.Dialog; +using keepass2android; namespace keepass2android { @@ -22,7 +24,8 @@ protected override void OnCreate(Bundle bundle) //we don't try to handle this better //But at least explain to the user what happened! ((NotificationManager)GetSystemService(Context.NotificationService)).CancelAll(); - AlertDialog.Builder b = new AlertDialog.Builder(this); + + MaterialAlertDialogBuilder b = new MaterialAlertDialogBuilder(this); b.SetMessage(Resource.String.killed_by_os); b.SetPositiveButton(Android.Resource.String.Ok, delegate { diff --git a/src/keepass2android/AssemblyInfo.cs b/src/keepass2android-app/AssemblyInfo.cs similarity index 100% rename from src/keepass2android/AssemblyInfo.cs rename to src/keepass2android-app/AssemblyInfo.cs diff --git a/src/keepass2android/Assets/LICENSE_SourceCodePro.txt b/src/keepass2android-app/Assets/LICENSE_SourceCodePro.txt similarity index 100% rename from src/keepass2android/Assets/LICENSE_SourceCodePro.txt rename to src/keepass2android-app/Assets/LICENSE_SourceCodePro.txt diff --git a/src/keepass2android/Assets/SourceCodePro-Regular.ttf b/src/keepass2android-app/Assets/SourceCodePro-Regular.ttf similarity index 100% rename from src/keepass2android/Assets/SourceCodePro-Regular.ttf rename to src/keepass2android-app/Assets/SourceCodePro-Regular.ttf diff --git a/src/keepass2android/Assets/fontawesome-webfont.ttf b/src/keepass2android-app/Assets/fontawesome-webfont.ttf similarity index 100% rename from src/keepass2android/Assets/fontawesome-webfont.ttf rename to src/keepass2android-app/Assets/fontawesome-webfont.ttf diff --git a/src/keepass2android/Assets/publicsuffix.txt b/src/keepass2android-app/Assets/publicsuffix.txt similarity index 100% rename from src/keepass2android/Assets/publicsuffix.txt rename to src/keepass2android-app/Assets/publicsuffix.txt diff --git a/src/keepass2android/AttachmentContentProvider.cs b/src/keepass2android-app/AttachmentContentProvider.cs similarity index 93% rename from src/keepass2android/AttachmentContentProvider.cs rename to src/keepass2android-app/AttachmentContentProvider.cs index 840f4432b..dc7561b09 100644 --- a/src/keepass2android/AttachmentContentProvider.cs +++ b/src/keepass2android-app/AttachmentContentProvider.cs @@ -3,6 +3,7 @@ using Android.OS; using Android.Util; using Java.IO; +using File = Java.IO.File; namespace keepass2android { @@ -55,7 +56,7 @@ public override ParcelFileDescriptor OpenFile(Android.Net.Uri uri, String mode) } Log.Verbose(logTag, "Unsupported uri: '" + uri + "'."); - throw new FileNotFoundException("Unsupported uri: " + throw new Java.IO.FileNotFoundException("Unsupported uri: " + uri.ToString()); } diff --git a/src/keepass2android/AutoOpenEdit.cs b/src/keepass2android-app/AutoOpenEdit.cs similarity index 99% rename from src/keepass2android/AutoOpenEdit.cs rename to src/keepass2android-app/AutoOpenEdit.cs index 730d5f144..313c20e0b 100644 --- a/src/keepass2android/AutoOpenEdit.cs +++ b/src/keepass2android-app/AutoOpenEdit.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using Android.App; +using keepass2android; using KeePassLib; using KeePassLib.Security; using KeePassLib.Serialization; diff --git a/src/keepass2android/BiometricModule.cs b/src/keepass2android-app/BiometricModule.cs similarity index 99% rename from src/keepass2android/BiometricModule.cs rename to src/keepass2android-app/BiometricModule.cs index 13afd03b7..cc3406448 100644 --- a/src/keepass2android/BiometricModule.cs +++ b/src/keepass2android-app/BiometricModule.cs @@ -16,6 +16,7 @@ using Java.Security.Cert; using Java.Util.Concurrent; using Javax.Crypto.Spec; +using keepass2android; using Exception = System.Exception; using File = System.IO.File; @@ -314,7 +315,7 @@ public override bool Init() { throw new RuntimeException(FailedToInitCipher + " (UnrecoverableKeyException)", e); } - catch (IOException e) + catch (Java.IO.IOException e) { throw new RuntimeException(FailedToInitCipher + " (IOException)", e); } @@ -395,7 +396,7 @@ private void CreateKey() { throw new RuntimeException(e); } - catch (IOException e) + catch (Java.IO.IOException e) { throw new RuntimeException(e); } @@ -433,7 +434,7 @@ public override bool Init() { throw new RuntimeException(FailedToInitCipher, e); } - catch (IOException e) + catch (Java.IO.IOException e) { throw new RuntimeException(FailedToInitCipher, e); } diff --git a/src/keepass2android/CancelDialog.cs b/src/keepass2android-app/CancelDialog.cs similarity index 100% rename from src/keepass2android/CancelDialog.cs rename to src/keepass2android-app/CancelDialog.cs diff --git a/src/keepass2android/ChallengeInfo.cs b/src/keepass2android-app/ChallengeInfo.cs similarity index 100% rename from src/keepass2android/ChallengeInfo.cs rename to src/keepass2android-app/ChallengeInfo.cs diff --git a/src/keepass2android/ChallengeXCKey.cs b/src/keepass2android-app/ChallengeXCKey.cs similarity index 97% rename from src/keepass2android/ChallengeXCKey.cs rename to src/keepass2android-app/ChallengeXCKey.cs index 8303cfe5b..9d87e50e1 100644 --- a/src/keepass2android/ChallengeXCKey.cs +++ b/src/keepass2android-app/ChallengeXCKey.cs @@ -1,4 +1,5 @@ using Java.Lang; +using keepass2android; using KeePassLib.Cryptography; using KeePassLib.Keys; using KeePassLib.Security; @@ -48,7 +49,7 @@ public ProtectedBinary KeyData }); while ((Response == null) && (Error == null)) { - Thread.Sleep(50); + System.Threading.Thread.Sleep(50); } if (Error != null) { diff --git a/src/keepass2android/ChangeLog.cs b/src/keepass2android-app/ChangeLog.cs similarity index 97% rename from src/keepass2android/ChangeLog.cs rename to src/keepass2android-app/ChangeLog.cs index 807b4ccb5..18819a33d 100644 --- a/src/keepass2android/ChangeLog.cs +++ b/src/keepass2android-app/ChangeLog.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -17,6 +17,8 @@ using Android.Views; using Android.Webkit; using Android.Widget; +using Google.Android.Material.Dialog; +using keepass2android; namespace keepass2android { @@ -24,7 +26,7 @@ public static class ChangeLog { public static void ShowChangeLog(Context ctx, Action onDismiss) { - AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(ctx, Android.Resource.Style.ThemeHoloLightDialog)); + MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(ctx); builder.SetTitle(ctx.GetString(Resource.String.ChangeLog_title)); List changeLog = new List{ BuildChangelogString(ctx, new List{Resource.Array.ChangeLog_1_11,Resource.Array.ChangeLog_1_11_net}, "1.11"), @@ -233,7 +235,7 @@ private static string GetLog(List changeLog, string warning, Context ctx else { w = w.Replace("\\n", "
"); - if ((w.StartsWith("*") || (w.StartsWith("")))) + if ((w.StartsWith("*") || (w.StartsWith("•")))) { if (!inList) { diff --git a/src/keepass2android/CloseImmediatelyActivity.cs b/src/keepass2android-app/CloseImmediatelyActivity.cs similarity index 77% rename from src/keepass2android/CloseImmediatelyActivity.cs rename to src/keepass2android-app/CloseImmediatelyActivity.cs index 1d7baac10..0bb82ca35 100644 --- a/src/keepass2android/CloseImmediatelyActivity.cs +++ b/src/keepass2android-app/CloseImmediatelyActivity.cs @@ -8,13 +8,13 @@ using Android.Content.PM; using Android.OS; using Android.Runtime; -using Android.Support.V7.App; using Android.Views; using Android.Widget; +using keepass2android; namespace keepass2android { - [Activity(Label = AppNames.AppName, Theme = "@style/MyTheme_ActionBar", ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden)] + [Activity(Label = AppNames.AppName, Theme = "@style/Kp2aTheme_ActionBar", ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden)] public class CloseImmediatelyActivity : AndroidX.AppCompat.App.AppCompatActivity { protected override void OnResume() diff --git a/src/keepass2android/ConfigureChildDatabasesActivity.cs b/src/keepass2android-app/ConfigureChildDatabasesActivity.cs similarity index 97% rename from src/keepass2android/ConfigureChildDatabasesActivity.cs rename to src/keepass2android-app/ConfigureChildDatabasesActivity.cs index 293e9f867..c9bbe6424 100644 --- a/src/keepass2android/ConfigureChildDatabasesActivity.cs +++ b/src/keepass2android-app/ConfigureChildDatabasesActivity.cs @@ -12,13 +12,14 @@ using Android.OS; using Android.Provider; using Android.Runtime; -using Android.Support.V7.App; using Android.Text; using Android.Util; using Android.Views; using Android.Widget; +using Google.Android.Material.Dialog; using keepass2android.database.edit; using KeePass.Util.Spr; +using keepass2android; using KeePassLib; using KeePassLib.Keys; using KeePassLib.Security; @@ -28,7 +29,7 @@ namespace keepass2android { - [Activity(Label = "@string/child_dbs_title", MainLauncher = false, Theme = "@style/MyTheme_Blue", LaunchMode = LaunchMode.SingleInstance, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden, Exported = true)] + [Activity(Label = "@string/child_dbs_title", MainLauncher = false, Theme = "@style/Kp2aTheme_BlueNoActionBar", LaunchMode = LaunchMode.SingleInstance, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden, Exported = true)] [IntentFilter(new[] { "kp2a.action.ConfigureChildDatabasesActivity" }, Categories = new[] { Intent.CategoryDefault })] public class ConfigureChildDatabasesActivity : LockCloseActivity { @@ -288,7 +289,7 @@ protected override void OnCreate(Bundle savedInstanceState) FindViewById