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