From 806d175ac70ffeb1e4aa5330b7824042dbe6af7e Mon Sep 17 00:00:00 2001 From: AlexVallat Date: Thu, 25 Jul 2013 13:47:04 +0100 Subject: [PATCH 1/2] index on master: cab539e Merge branch 'master' of https://git01.codeplex.com/keepass2android From 6c948240287fa456674ce33335f33e0d7f71c8e9 Mon Sep 17 00:00:00 2001 From: AlexVallat Date: Thu, 25 Jul 2013 13:47:05 +0100 Subject: [PATCH 2/2] untracked files on master: cab539e Merge branch 'master' of https://git01.codeplex.com/keepass2android --- src/KeePass2Android.sln | 235 ++++++++++++++++++ .../drawable-hdpi/ic_launcher_red.png | Bin 0 -> 2636 bytes .../drawable-mdpi/ic_launcher_red.png | Bin 0 -> 1603 bytes .../drawable-v11/ic_unlocked_gray.png | Bin 0 -> 1976 bytes .../drawable-xhdpi/ic_launcher_red.png | Bin 0 -> 3250 bytes .../drawable-xxhdpi/ic_launcher_red.png | Bin 0 -> 5431 bytes .../Resources/drawable/ic_launcher_red.png | Bin 0 -> 1603 bytes .../Resources/drawable/ic_unlocked_gray.png | Bin 0 -> 1585 bytes .../services/Keepass2AndroidService.cs | 227 +++++++++++++++++ 9 files changed, 462 insertions(+) create mode 100644 src/KeePass2Android.sln create mode 100644 src/keepass2android/Resources/drawable-hdpi/ic_launcher_red.png create mode 100644 src/keepass2android/Resources/drawable-mdpi/ic_launcher_red.png create mode 100644 src/keepass2android/Resources/drawable-v11/ic_unlocked_gray.png create mode 100644 src/keepass2android/Resources/drawable-xhdpi/ic_launcher_red.png create mode 100644 src/keepass2android/Resources/drawable-xxhdpi/ic_launcher_red.png create mode 100644 src/keepass2android/Resources/drawable/ic_launcher_red.png create mode 100644 src/keepass2android/Resources/drawable/ic_unlocked_gray.png create mode 100644 src/keepass2android/services/Keepass2AndroidService.cs diff --git a/src/KeePass2Android.sln b/src/KeePass2Android.sln new file mode 100644 index 00000000..2eb64329 --- /dev/null +++ b/src/KeePass2Android.sln @@ -0,0 +1,235 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2010 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KeePassLib2Android", "KeePassLib2Android\KeePassLib2Android.csproj", "{545B4A6B-8BBA-4FBE-92FC-4AC060122A54}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "keepass2android", "keepass2android\keepass2android.csproj", "{A6CF8A86-37C1-4197-80FE-519DE2C842F5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "kp2akeytransform", "kp2akeytransform\kp2akeytransform.csproj", "{A57B3ACE-5634-469A-88C4-858BB409F356}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kp2aKeyboardBinding", "Kp2aKeyboardBinding\Kp2aKeyboardBinding.csproj", "{A8779D4D-7C49-4C2F-82BD-2CDC448391DA}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kp2aBusinessLogic", "Kp2aBusinessLogic\Kp2aBusinessLogic.csproj", "{53A9CB7F-6553-4BC0-B56B-9410BB2E59AA}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MonoDroidUnitTesting", "monodroid-unittesting\MonoDroidUnitTesting\MonoDroidUnitTesting.csproj", "{A5F8FB02-00E0-4335-91EF-AEAA2C2F3C48}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kp2aUnitTests", "Kp2aUnitTests\Kp2aUnitTests.csproj", "{46B769B8-2C58-4138-9CC0-70E3AE3C9A3A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + ReleaseNoNet|Any CPU = ReleaseNoNet|Any CPU + ReleaseNoNet|Mixed Platforms = ReleaseNoNet|Mixed Platforms + ReleaseNoNet|Win32 = ReleaseNoNet|Win32 + 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 + {A6CF8A86-37C1-4197-80FE-519DE2C842F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A6CF8A86-37C1-4197-80FE-519DE2C842F5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A6CF8A86-37C1-4197-80FE-519DE2C842F5}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {A6CF8A86-37C1-4197-80FE-519DE2C842F5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {A6CF8A86-37C1-4197-80FE-519DE2C842F5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {A6CF8A86-37C1-4197-80FE-519DE2C842F5}.Debug|Mixed Platforms.Deploy.0 = Debug|Any CPU + {A6CF8A86-37C1-4197-80FE-519DE2C842F5}.Debug|Win32.ActiveCfg = Debug|Any CPU + {A6CF8A86-37C1-4197-80FE-519DE2C842F5}.Debug|Win32.Build.0 = Debug|Any CPU + {A6CF8A86-37C1-4197-80FE-519DE2C842F5}.Debug|x64.ActiveCfg = Debug|Any CPU + {A6CF8A86-37C1-4197-80FE-519DE2C842F5}.Debug|x64.Build.0 = Debug|Any CPU + {A6CF8A86-37C1-4197-80FE-519DE2C842F5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A6CF8A86-37C1-4197-80FE-519DE2C842F5}.Release|Any CPU.Build.0 = Release|Any CPU + {A6CF8A86-37C1-4197-80FE-519DE2C842F5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {A6CF8A86-37C1-4197-80FE-519DE2C842F5}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {A6CF8A86-37C1-4197-80FE-519DE2C842F5}.Release|Win32.ActiveCfg = Release|Any CPU + {A6CF8A86-37C1-4197-80FE-519DE2C842F5}.Release|Win32.Build.0 = Release|Any CPU + {A6CF8A86-37C1-4197-80FE-519DE2C842F5}.Release|x64.ActiveCfg = Release|Any CPU + {A6CF8A86-37C1-4197-80FE-519DE2C842F5}.Release|x64.Build.0 = Release|Any CPU + {A6CF8A86-37C1-4197-80FE-519DE2C842F5}.ReleaseNoNet|Any CPU.ActiveCfg = ReleaseNoNet|Any CPU + {A6CF8A86-37C1-4197-80FE-519DE2C842F5}.ReleaseNoNet|Any CPU.Build.0 = ReleaseNoNet|Any CPU + {A6CF8A86-37C1-4197-80FE-519DE2C842F5}.ReleaseNoNet|Mixed Platforms.ActiveCfg = ReleaseNoNet|Any CPU + {A6CF8A86-37C1-4197-80FE-519DE2C842F5}.ReleaseNoNet|Mixed Platforms.Build.0 = ReleaseNoNet|Any CPU + {A6CF8A86-37C1-4197-80FE-519DE2C842F5}.ReleaseNoNet|Mixed Platforms.Deploy.0 = ReleaseNoNet|Any CPU + {A6CF8A86-37C1-4197-80FE-519DE2C842F5}.ReleaseNoNet|Win32.ActiveCfg = ReleaseNoNet|Any CPU + {A6CF8A86-37C1-4197-80FE-519DE2C842F5}.ReleaseNoNet|x64.ActiveCfg = ReleaseNoNet|Any CPU + {A57B3ACE-5634-469A-88C4-858BB409F356}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A57B3ACE-5634-469A-88C4-858BB409F356}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A57B3ACE-5634-469A-88C4-858BB409F356}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {A57B3ACE-5634-469A-88C4-858BB409F356}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {A57B3ACE-5634-469A-88C4-858BB409F356}.Debug|Win32.ActiveCfg = Debug|Any CPU + {A57B3ACE-5634-469A-88C4-858BB409F356}.Debug|Win32.Build.0 = Debug|Any CPU + {A57B3ACE-5634-469A-88C4-858BB409F356}.Debug|x64.ActiveCfg = Debug|Any CPU + {A57B3ACE-5634-469A-88C4-858BB409F356}.Debug|x64.Build.0 = Debug|Any CPU + {A57B3ACE-5634-469A-88C4-858BB409F356}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A57B3ACE-5634-469A-88C4-858BB409F356}.Release|Any CPU.Build.0 = Release|Any CPU + {A57B3ACE-5634-469A-88C4-858BB409F356}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {A57B3ACE-5634-469A-88C4-858BB409F356}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {A57B3ACE-5634-469A-88C4-858BB409F356}.Release|Win32.ActiveCfg = Release|Any CPU + {A57B3ACE-5634-469A-88C4-858BB409F356}.Release|Win32.Build.0 = Release|Any CPU + {A57B3ACE-5634-469A-88C4-858BB409F356}.Release|x64.ActiveCfg = Release|Any CPU + {A57B3ACE-5634-469A-88C4-858BB409F356}.Release|x64.Build.0 = Release|Any CPU + {A57B3ACE-5634-469A-88C4-858BB409F356}.ReleaseNoNet|Any CPU.ActiveCfg = Debug|Any CPU + {A57B3ACE-5634-469A-88C4-858BB409F356}.ReleaseNoNet|Any CPU.Build.0 = Debug|Any CPU + {A57B3ACE-5634-469A-88C4-858BB409F356}.ReleaseNoNet|Mixed Platforms.ActiveCfg = Release|Any CPU + {A57B3ACE-5634-469A-88C4-858BB409F356}.ReleaseNoNet|Mixed Platforms.Build.0 = Release|Any CPU + {A57B3ACE-5634-469A-88C4-858BB409F356}.ReleaseNoNet|Win32.ActiveCfg = Release|Any CPU + {A57B3ACE-5634-469A-88C4-858BB409F356}.ReleaseNoNet|x64.ActiveCfg = Release|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 = Release|Any CPU + {A8779D4D-7C49-4C2F-82BD-2CDC448391DA}.ReleaseNoNet|Mixed Platforms.Build.0 = Release|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 = Release|Any CPU + {53A9CB7F-6553-4BC0-B56B-9410BB2E59AA}.ReleaseNoNet|Any CPU.Build.0 = Release|Any CPU + {53A9CB7F-6553-4BC0-B56B-9410BB2E59AA}.ReleaseNoNet|Mixed Platforms.ActiveCfg = Release|Any CPU + {53A9CB7F-6553-4BC0-B56B-9410BB2E59AA}.ReleaseNoNet|Mixed Platforms.Build.0 = Release|Any CPU + {53A9CB7F-6553-4BC0-B56B-9410BB2E59AA}.ReleaseNoNet|Win32.ActiveCfg = Release|Any CPU + {53A9CB7F-6553-4BC0-B56B-9410BB2E59AA}.ReleaseNoNet|x64.ActiveCfg = Release|Any CPU + {A5F8FB02-00E0-4335-91EF-AEAA2C2F3C48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A5F8FB02-00E0-4335-91EF-AEAA2C2F3C48}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A5F8FB02-00E0-4335-91EF-AEAA2C2F3C48}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {A5F8FB02-00E0-4335-91EF-AEAA2C2F3C48}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {A5F8FB02-00E0-4335-91EF-AEAA2C2F3C48}.Debug|Win32.ActiveCfg = Debug|Any CPU + {A5F8FB02-00E0-4335-91EF-AEAA2C2F3C48}.Debug|x64.ActiveCfg = Debug|Any CPU + {A5F8FB02-00E0-4335-91EF-AEAA2C2F3C48}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A5F8FB02-00E0-4335-91EF-AEAA2C2F3C48}.Release|Any CPU.Build.0 = Release|Any CPU + {A5F8FB02-00E0-4335-91EF-AEAA2C2F3C48}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {A5F8FB02-00E0-4335-91EF-AEAA2C2F3C48}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {A5F8FB02-00E0-4335-91EF-AEAA2C2F3C48}.Release|Win32.ActiveCfg = Release|Any CPU + {A5F8FB02-00E0-4335-91EF-AEAA2C2F3C48}.Release|x64.ActiveCfg = Release|Any CPU + {A5F8FB02-00E0-4335-91EF-AEAA2C2F3C48}.ReleaseNoNet|Any CPU.ActiveCfg = Release|Any CPU + {A5F8FB02-00E0-4335-91EF-AEAA2C2F3C48}.ReleaseNoNet|Any CPU.Build.0 = Release|Any CPU + {A5F8FB02-00E0-4335-91EF-AEAA2C2F3C48}.ReleaseNoNet|Mixed Platforms.ActiveCfg = Release|Any CPU + {A5F8FB02-00E0-4335-91EF-AEAA2C2F3C48}.ReleaseNoNet|Mixed Platforms.Build.0 = Release|Any CPU + {A5F8FB02-00E0-4335-91EF-AEAA2C2F3C48}.ReleaseNoNet|Win32.ActiveCfg = Release|Any CPU + {A5F8FB02-00E0-4335-91EF-AEAA2C2F3C48}.ReleaseNoNet|x64.ActiveCfg = Release|Any CPU + {46B769B8-2C58-4138-9CC0-70E3AE3C9A3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {46B769B8-2C58-4138-9CC0-70E3AE3C9A3A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {46B769B8-2C58-4138-9CC0-70E3AE3C9A3A}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {46B769B8-2C58-4138-9CC0-70E3AE3C9A3A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {46B769B8-2C58-4138-9CC0-70E3AE3C9A3A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {46B769B8-2C58-4138-9CC0-70E3AE3C9A3A}.Debug|Mixed Platforms.Deploy.0 = Debug|Any CPU + {46B769B8-2C58-4138-9CC0-70E3AE3C9A3A}.Debug|Win32.ActiveCfg = Debug|Any CPU + {46B769B8-2C58-4138-9CC0-70E3AE3C9A3A}.Debug|x64.ActiveCfg = Debug|Any CPU + {46B769B8-2C58-4138-9CC0-70E3AE3C9A3A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {46B769B8-2C58-4138-9CC0-70E3AE3C9A3A}.Release|Any CPU.Build.0 = Release|Any CPU + {46B769B8-2C58-4138-9CC0-70E3AE3C9A3A}.Release|Any CPU.Deploy.0 = Release|Any CPU + {46B769B8-2C58-4138-9CC0-70E3AE3C9A3A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {46B769B8-2C58-4138-9CC0-70E3AE3C9A3A}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {46B769B8-2C58-4138-9CC0-70E3AE3C9A3A}.Release|Mixed Platforms.Deploy.0 = Release|Any CPU + {46B769B8-2C58-4138-9CC0-70E3AE3C9A3A}.Release|Win32.ActiveCfg = Release|Any CPU + {46B769B8-2C58-4138-9CC0-70E3AE3C9A3A}.Release|x64.ActiveCfg = Release|Any CPU + {46B769B8-2C58-4138-9CC0-70E3AE3C9A3A}.ReleaseNoNet|Any CPU.ActiveCfg = Release|Any CPU + {46B769B8-2C58-4138-9CC0-70E3AE3C9A3A}.ReleaseNoNet|Any CPU.Build.0 = Release|Any CPU + {46B769B8-2C58-4138-9CC0-70E3AE3C9A3A}.ReleaseNoNet|Any CPU.Deploy.0 = Release|Any CPU + {46B769B8-2C58-4138-9CC0-70E3AE3C9A3A}.ReleaseNoNet|Mixed Platforms.ActiveCfg = Release|Any CPU + {46B769B8-2C58-4138-9CC0-70E3AE3C9A3A}.ReleaseNoNet|Mixed Platforms.Build.0 = Release|Any CPU + {46B769B8-2C58-4138-9CC0-70E3AE3C9A3A}.ReleaseNoNet|Mixed Platforms.Deploy.0 = Release|Any CPU + {46B769B8-2C58-4138-9CC0-70E3AE3C9A3A}.ReleaseNoNet|Win32.ActiveCfg = Release|Any CPU + {46B769B8-2C58-4138-9CC0-70E3AE3C9A3A}.ReleaseNoNet|x64.ActiveCfg = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(MonoDevelopProperties) = preSolution + StartupItem = keepass2android\keepass2android.csproj + Policies = $0 + $0.DotNetNamingPolicy = $1 + $1.DirectoryNamespaceAssociation = None + $1.ResourceNamePolicy = FileFormatDefault + $0.TextStylePolicy = $5 + $2.FileWidth = 120 + $2.TabsToSpaces = False + $2.inheritsSet = VisualStudio + $2.inheritsScope = text/plain + $2.scope = text/x-csharp + $0.CSharpFormattingPolicy = $3 + $3.IndentSwitchBody = True + $3.AnonymousMethodBraceStyle = NextLine + $3.PropertyBraceStyle = NextLine + $3.PropertyGetBraceStyle = NextLine + $3.PropertySetBraceStyle = NextLine + $3.EventBraceStyle = NextLine + $3.EventAddBraceStyle = NextLine + $3.EventRemoveBraceStyle = NextLine + $3.StatementBraceStyle = NextLine + $3.ArrayInitializerBraceStyle = NextLine + $3.BeforeMethodDeclarationParentheses = False + $3.BeforeMethodCallParentheses = False + $3.BeforeConstructorDeclarationParentheses = False + $3.BeforeDelegateDeclarationParentheses = False + $3.NewParentheses = False + $3.inheritsSet = Mono + $3.inheritsScope = text/x-csharp + $3.scope = text/x-csharp + $4.FileWidth = 120 + $4.TabsToSpaces = False + $4.inheritsSet = VisualStudio + $4.inheritsScope = text/plain + $4.scope = text/plain + $5.inheritsSet = null + $5.scope = application/xml + $0.XmlFormattingPolicy = $6 + $6.inheritsSet = Mono + $6.inheritsScope = application/xml + $6.scope = application/xml + $0.StandardHeader = $7 + $7.Text = @/*\nThis file is part of Keepass2Android, Copyright 2013 Philipp Crocoll.\n\n Keepass2Android is free software: you can redistribute it and/or modify\n it under the terms of the GNU General Public License as published by\n the Free Software Foundation, either version 2 of the License, or\n (at your option) any later version.\n\n Keepass2Android is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License\n along with Keepass2Android. If not, see .\n */\n + $7.IncludeInNewFiles = True + EndGlobalSection +EndGlobal diff --git a/src/keepass2android/Resources/drawable-hdpi/ic_launcher_red.png b/src/keepass2android/Resources/drawable-hdpi/ic_launcher_red.png new file mode 100644 index 0000000000000000000000000000000000000000..797eb52f5e1892c75de4ec2393112a4db490084f GIT binary patch literal 2636 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

$^rm-G)nZ!6@vTs z_*(KLK3R{{`x>n-k{IYXkq-yQw}i>Za|EEgtyX7_FyUU?-8I?>-xth<}Z zfdPy}BJbS_zn`krtMPBzMD^OWR4!Xa)4_v8Iy<@l!w*l$0zx>>Ai+1@p#G(o07woD zFnanlQ$s_xb5fBAsYrzJt}bd{c!9<}d+@DXN#m|v0Ngu!cK$Kow20Mj+m;0%y>f*= zzy2D_FwmAR#YiS?*HKgzb;%N9Jv}4`2U-38`&6%6N8_$t%#4l_y?WJsI?k(f=`@yU zmb}!O8X8}F4S;xGAAf%NB{H3+;pLZUZf~dQz=7g(rR2E}KA^e19e-;pA|7Y($PuQ( zVNev7@7;@{s&nc$3j*I$m`0@#C9j69TTyFjkf{`RIyx|>r;$RiI2c6HG^$puDmqW` zc&KV>$_BC&0)1kFkrOAtvRD)dP`7d8ocaq>{cIO1m4y_Ax(youc+l0wbU2(H8a;Ii z5sMMOe!Zv*8ObDneEvDr>((*$(@)uV;=R4Z`}(L2h463M#MqBNK7JN@WF|YQeCjED z!5{#!o}Rp*PmPUnr=z2!@>q8_vF`5K&wF~P4TV^oS=(tcDP9NWXy)SAuLCe04nJ1q zE+)x=0pfjq4^yPaQ*zzHvD~s-dtv9!nBuY$FSJ;e#kS7Qr9gbP3kd->7HB$na6y3% zfAy6k3pkE};Onn1D1o7)N8QJOG0)EMNs3b}c?43XiN_`eF6`K`pagUq0VQ=JDV(MVJLZ?VisfU^nsAGiMwrzIXO4*Nz^gDHLLTTN^T+ z=Eg@KF*-azr-p_wEDMoy9uV<3hGjAN`|pm|F>E}cFb47p z+3}4VV_p|0vQqM_&&QTirx5WtKOZ>2*y9`@i^YJHynF3h@j_+-(#CWzhCzq&x8L&HXP*&hZAH;E zD*S#{ty#m>8#icr=N+DQn2s;Ev^dH_p29)9%c(rLcoEaGsNb^XpA+2X&6t+OgNqkk ze93i&MJ+Us9oS0_TZ#T~7}K)&>$~r`p9$ERNCeZe`1SmG5;t$os}7WOA!%8*S?HI+ zL07@nb?eq_>*zWUT(0A)5|@&FAAh`{t;C5#hurr<#TY)4z|Nfu`xUya?ePfM$@Iub zSsrlI!oaahqeu4cEepUU)9AlZ9H-H;ITM%qGWTzkJOUHCZk9XXLX5cttln5`bX?c5 zGNvlGYh2gqjm1WDJt;Q^jF=D~ULGI+blNln1+8{jxWCWqjijXf5HO0J2fTnEXauS$ z!$0-FBybOy$lTA`WiJnZBCF+Sfy~aQAA$c*$lr$|j#xomiF^P6002ovPDHLkV1j)G B1uXyo literal 0 HcmV?d00001 diff --git a/src/keepass2android/Resources/drawable-v11/ic_unlocked_gray.png b/src/keepass2android/Resources/drawable-v11/ic_unlocked_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..c054e5e3cfcdac226da79e40748019f698c37aab GIT binary patch literal 1976 zcmV;p2S@mcP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i*r5 z2qQ1%E_&1e00%fpL_t(|+U=WNj9pa~$A9bGnLGVb+DfNDDgkO8B7{r;HKCOlBheV2 zN=U!}#zaHngD*V!;EPcb!-t6y9-0_~21qa%L=%gR^{b#J7KjC{ZQ9zj19fa?re&s` z>D+VvJlwT2yVpB&&pG#F?nqa1a_+fj-+k8Sf33aFzHpf?Q%^|JDoF;gfB*hOQZ>3a z=;!#bUhrjI7P?|)sid{Q=YWp^lYXoPHaHJ&1E+w)z<&=NIy5^nGLpthFf*+v1xQ*2 z+yvYP+yLwVwgYE?bwCQ#fW)tl0mp$if!_mf0LQm%*^-Wpjp^{=!?tbPHubxkTbiaH zlJrSQUzPMTNyjBkYH7+EK95U!QPS5XZQZ$Zr}cdZWLcJ&*@(OPr-3_wO%1~?0wMO_ z1q6Ix2|oS}{1$i)_@kN4OR`RegLTOAn_TdFfl(K{>H^k))4)lO^&>7=707@A;6~u% zzz2bAfWa`epZ5We0(;GDrjs5p&;jAsxbR;CZU@%*t#dB$QQ%eJ1z-Y5B%L+03qEc& zZ~+(rKI-QOfsgn-TsaQ`bHH!h#= zmnE$$Av}`EvW&97?WF?NN&2Y+U7(|q9+b4Y6HJefkLR9a_wL;c4-fZF36idp^lNu{ zIXFEoX}A@$X`1H37Jyy5b~VGCB^B8dB}n?Bq_-mLzanWguca5e&hxug&nT;aq=4{i zflv6t1}|RrPE1T3j0&2eFsGSec4?v6?E3WS(~EjUIGb5Z4>GgvdV%NV*COkmko0-C z!bVA393-t|T5ajx-SC1UrSNv(s_6PH-~do@>z{12L~QY3$-I_pw0O6yo8+`o;?0W< zk^BDz81n_oTr(GsE!0f-B`q^B@IRr`YL24MDB=NCU?Z@~1+Mz4uHuc2$#yJNHh#+p zTowf9f$QAT=4<&m7d`>fJj}EbvKeqT^Ma+ubxQ%OfthIh1#e_r(o@JIV5@s&!lf4q zsCZK&G%7ZFZ;xR8!1(<9d{9a$DS9b<5e1y{^Gsy*&ECwsq=j9rRzoL8%OzCD72rL% zcf7+B1l$f>*{o$9$7$CKlpc8i-nO3b&qJ<&8$CQ0Ep>Yx)7`2A4EPuDH}CA?CGn?# z4ME6erEWh9Unm63>=dxal~4mt0Mk*Mdqq;wuJ8e1zo*4t0xw3mup+7G!lmkM>#Kb& z@E@So?{41dRpDSiqk307z(H`-tG`*t4n=cVocDWelZcPR&*Q*RGfO+AfI;BT)Zg@; z^+i$4z;X$nH1H7s`NzP+W_DImVrE&pAZSq;e8mdz>}nYeb`&sI3b+?ZgCU-#y%Ov@ ze2y%i=2b!&5S(iO!A@AE5k$4f_jx=zfZ#DRt92snt=J@=hxZ~Lu-RQKErAD#r_Xa< zMrXc=S`TDqc1BW#h5bV7qj6Tk%cg;;JUdD9Vn79WnEIxtiGtXXP~Z8n2YAxVYLadM z?gzF3HAyd+*{^`qcbhx}T+c!at_Y?Xu-8-J`HpO<@%Q+DS9|mwpKCzUQw{gtmUO4z zAC~k?o6mYqQh1e~bSe$DL#Kd0_~+|^yBfgmYT#~Pd5%-xL)3}tu%l^k$|ruOK%rsO zH$3P!eqop$PDxd~DLcJM!KJEhLpg|Y@s9zre ze(snOox(oUNhf@T-j0!pu!>G!hhe>;F*Hh5ni6|1%Bu`dK7pd8Z!#K zY-V$kJ_~%)UHD=_pbiVRmnHqk%vz?wyn-aux4+)phE>i3Kk(0+S=dksaF3*C&FqAO z-?h{?N|vQb;3s*?>Acz%3*F$XBvY@O*^GPBU0xgoy3M@{;C1T##&#$-k4b?T4#9um$XG+s3_+%Rg|}e z--cS{4PdvK&2}mc1_j*e2exenFUd|{%ZSwNACeB9=_2!*2|9o0000< KMNUMnLSTZ2*|B;6 literal 0 HcmV?d00001 diff --git a/src/keepass2android/Resources/drawable-xhdpi/ic_launcher_red.png b/src/keepass2android/Resources/drawable-xhdpi/ic_launcher_red.png new file mode 100644 index 0000000000000000000000000000000000000000..a048b8c6107ac157c6f7233e83f4fcd6e86acef0 GIT binary patch literal 3250 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 literal 0 HcmV?d00001 diff --git a/src/keepass2android/Resources/drawable/ic_launcher_red.png b/src/keepass2android/Resources/drawable/ic_launcher_red.png new file mode 100644 index 0000000000000000000000000000000000000000..d01a118a9fd272132156872d656e40942672cfc8 GIT binary patch literal 1603 zcmV-J2E6%+P)Px){YgYYRA}DqncHs^RUF4ZvpdtmmbP?Taf>V#luKf|kx){CA_*Y|3Gn6x9t;wr z{tE>ke5uAa6CWUgmj_c~-~kc|B}Nk@DTa&o0u-^WU20)zX!p`>yE|v*j1Mg9?sjK8 zLrJq5f5|+|oH^(B{hr_T%)tNhzsyUN+?(FRhg)jaum3{Pv=HDeGpwd1L~r8Ot@lFh z?N=W?RC8YN`c|wsrcX?~D0RIYH{0u}sMz3JvEmre0+@vaDvhbBX3H?j)?Lh*8Ke-+ zKqW9;NI;dTlvnY3%i8BmW-vhreA z%^NdKP!z{&i9~|Rh6a4WAXCG`u5i?~wqhB^L!IskU{AoML^?YO?%PMIqXT1V3azGw zMa!2{SznK$X<6SD(I_)_?_wmAED8judj5Hazxf8FoR>@G5s

$^rm-G)nZ!6@vTs z_*(KLK3R{{`x>n-k{IYXkq-yQw}i>Za|EEgtyX7_FyUU?-8I?>-xth<}Z zfdPy}BJbS_zn`krtMPBzMD^OWR4!Xa)4_v8Iy<@l!w*l$0zx>>Ai+1@p#G(o07woD zFnanlQ$s_xb5fBAsYrzJt}bd{c!9<}d+@DXN#m|v0Ngu!cK$Kow20Mj+m;0%y>f*= zzy2D_FwmAR#YiS?*HKgzb;%N9Jv}4`2U-38`&6%6N8_$t%#4l_y?WJsI?k(f=`@yU zmb}!O8X8}F4S;xGAAf%NB{H3+;pLZUZf~dQz=7g(rR2E}KA^e19e-;pA|7Y($PuQ( zVNev7@7;@{s&nc$3j*I$m`0@#C9j69TTyFjkf{`RIyx|>r;$RiI2c6HG^$puDmqW` zc&KV>$_BC&0)1kFkrOAtvRD)dP`7d8ocaq>{cIO1m4y_Ax(youc+l0wbU2(H8a;Ii z5sMMOe!Zv*8ObDneEvDr>((*$(@)uV;=R4Z`}(L2h463M#MqBNK7JN@WF|YQeCjED z!5{#!o}Rp*PmPUnr=z2!@>q8_vF`5K&wF~P4TV^oS=(tcDP9NWXy)SAuLCe04nJ1q zE+)x=0pfjq4^yPaQ*zzHvD~s-dtv9!nBuY$FSJ;e#kS7Qr9gbP3kd->7HB$na6y3% zfAy6k3pkE};Onn1D1o7)N8QJOG0)EMNs3b}c?43XiN_`eF6`K`pagUq0VQ=JDV(MVJLZ?VisfU^nsAGiMwrzIXO4*Nz^gDHLLTTN^T+ z=Eg@KF*-azr-p_wEDMoy9uV<3hGjAN`|pm|F>E}cFb47p z+3}4VV_p|0vQqM_&&QTirx5WtKOZ>2*y9`@i^YJHynF3h@j_+-(#CWzhCzq&x8L&HXP*&hZAH;E zD*S#{ty#m>8#icr=N+DQn2s;Ev^dH_p29)9%c(rLcoEaGsNb^XpA+2X&6t+OgNqkk ze93i&MJ+Us9oS0_TZ#T~7}K)&>$~r`p9$ERNCeZe`1SmG5;t$os}7WOA!%8*S?HI+ zL07@nb?eq_>*zWUT(0A)5|@&FAAh`{t;C5#hurr<#TY)4z|Nfu`xUya?ePfM$@Iub zSsrlI!oaahqeu4cEepUU)9AlZ9H-H;ITM%qGWTzkJOUHCZk9XXLX5cttln5`bX?c5 zGNvlGYh2gqjm1WDJt;Q^jF=D~ULGI+blNln1+8{jxWCWqjijXf5HO0J2fTnEXauS$ z!$0-FBybOy$lTA`WiJnZBCF+Sfy~aQAA$c*$lr$|j#xomiF^P6002ovPDHLkV1j)G B1uXyo literal 0 HcmV?d00001 diff --git a/src/keepass2android/Resources/drawable/ic_unlocked_gray.png b/src/keepass2android/Resources/drawable/ic_unlocked_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0ca74ba069cf3431ec6f65cd7ea8662e74d6ce GIT binary patch literal 1585 zcmV-12G043P)Px)>q$gGR9M5smu-lgR~5&9=RPw#n~7bsJDnN3vvb#^OB6wim3@I_}JDb~ow$GIO8jKIfeKKmYST_X@XQluD&+6h+1ub1k3Gi->e@)`qzifvM_~ zaU36OwOWygbX8SuOJJ%h<#O57>vhwctEvHT&J{#tUPRt9KR@58)oKY5(VO*=*hyf) zkya`d>7OqyF78VvlbJY<6RA|{Cje7ZQ}K>`412Mcs_VF_ zJ_`J5a&q!)x7#&w96uZa`VcS;R7K?9syYkI0E;4WFwBjJpsLHpn6CjpFBA%|ZwIlF zfi)V9)cX4RQC0nDSUUlHT2<4)t0M9}W6T9rU5cV8+3j}Q-uq1vF(UFl@BInj{lMEr zqy>B*c&=D1Ug*(dSdiN)iui0)#^kPMViTE zIx8zHlW`p1r>ak=>f<7^3A~U_r=QAXGHbh%i>p_!7UDSmf`}Xj8pfD!7-K%(Zns~U znVG5AYPE!_MgYxbbE4Df9NXO7{Ec(&jQ9S)+}zx`$;rvji^%g~-RCwoHomgFygajG zxj23Lv`Hiqk9hAtCI1_zn$70Z3kwSyy*2%EkV>UG-uolKQD7;KWGtm}7BsZ^5Q`#i8&EEdn~Dl1inRnwrvJ!|zG2R8=n`R#m&IdUkDXO%5D5fHCIs<;#~# zhYlU;j53_fW|duxp>ko2IS3?0BodK>-EKE2B5|wLGUI~U$#Blec6F?!s>`a{1n$UY zvuzR4R4V0rsTwr4mm{%NQ53yA*g|%js$GqGy`Ffpe9Hh@32SZa zoO>8}2H5CZ6Nlrz#9lfe!=i z5xWpzKky4{?N#U8L%<>6jJ5Vku<;S#KVwv31NgnQcBxMh{x6kLNX;?e*==le4fvgN z?jGPwcy_$&9hE$>l-U|G{TKf;@+}Hcwz1KOH2V7rO z$6MG?U?1>W@bd4=ut2CfVg z(%z6ieD`DLT-P~w|6cUU#1Mf!9{6!%gs4X0*7St6_B`;efWUpgdFR{-;M+iLgpCwX z0Zv+LU*3+u76H3W@-I2(?gj1%&z=OH29m)1Hf$UQGUEicm*al|=Yhr$ekkxZ;2CS} zCFk5@ftPvUigPXtTm*g@0_==HY&BHmSdK-!31g7k!vyvnK^$8n_@M!fs85Ldn>1sp zy2sNd@LOwbspo&3z<%d80`@VW6pF`>I`h~2bZuM{-|a!Q94dFD!1ka&8+zqloWaK3 jIhw$$w@hI7`ZDrg07T+_xley900000NkvXXu0mjfv. + */ + +using System; +using Android.App; +using Android.Content; +using Android.Graphics; +using Android.OS; +using Android.Preferences; +using Android.Support.V4.App; +using KeePassLib.Utility; + +namespace keepass2android +{ + ///

+ /// General purpose service for Keepass2Android + /// + /// Manages timeout to lock the database after some idle time + /// Shows database unlocked warning persistent notification + /// Shows Quick-Unlock notification + /// + [Service] + public class Keepass2AndroidService : Service { + + #region Service + private const int ServiceId = 238787; + + private BroadcastReceiver _intentReceiver; + + public override void OnCreate() { + base.OnCreate(); + + _intentReceiver = new Keepass2AndroidServiceBroadcastReceiver(this); + + IntentFilter filter = new IntentFilter(); + filter.AddAction(Intents.Timeout); + filter.AddAction(Intents.LockDatabase); + filter.AddAction(Intents.UnlockDatabase); + RegisterReceiver(_intentReceiver, filter); + + } + + public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId) + { + Kp2aLog.Log("Starting Keepass2AndroidService"); + + var prefs = PreferenceManager.GetDefaultSharedPreferences(this); + + Notification notification = null; + + if (prefs.GetBoolean(GetString(Resource.String.ShowUnlockedNotification_key), Resources.GetBoolean(Resource.Boolean.ShowUnlockedNotification_default)) + && App.Kp2a.DatabaseIsUnlocked) + { + // Show the Unlocked icon + notification = GetUnlockedNotification(); + + } + else if (App.Kp2a.QuickUnlockEnabled) + { + // Show the Quick Unlock icon + notification = GetQuickUnlockNotification(); + } + + if (notification != null) + { + if (App.Kp2a.QuickUnlockEnabled) + { + StartForeground(ServiceId, notification); + } + else + { + // Doesn't actually need to be persistent in memory, allow it to be killed as required + var notificationManager = (NotificationManager)GetSystemService(NotificationService); + notificationManager.Notify(ServiceId, notification); + } + } + + return StartCommandResult.NotSticky; + } + + public override void OnDestroy() + { + base.OnDestroy(); + + var notificationManager = (NotificationManager)GetSystemService(NotificationService); + notificationManager.Cancel(ServiceId); + + Kp2aLog.Log("Destroying Keepass2AndroidService"); + UnregisterReceiver(_intentReceiver); + + // The service will be stopped deliberately to cause the database to lock. + // If the service is killed, then also lock the database immediately (as timeout will no longer work, and the unlocked warning icon will no longer display) + Application.Context.SendBroadcast(new Intent(Intents.LockDatabase)); // Ensure all other listeners receive the Lock broadcast + App.Kp2a.LockDatabaseInternal(this); + } + + public override IBinder OnBind(Intent intent) + { + return null; + } + #endregion + + #region Timeout + private void Timeout() + { + Kp2aLog.Log("Timeout"); + StopSelf(); + } + #endregion + + #region QuickUnlock + + private Notification GetQuickUnlockNotification() + { + NotificationCompat.Builder builder = + new NotificationCompat.Builder(this) + .SetSmallIcon(Resource.Drawable.ic_launcher_gray) + .SetLargeIcon(BitmapFactory.DecodeResource(Resources, AppNames.LauncherIcon)) + .SetContentTitle(GetText(Resource.String.app_name)) + .SetContentText(GetString(Resource.String.database_loaded_quickunlock_enabled, GetDatabaseName())); + + Intent startKp2aIntent = new Intent(this, typeof(KeePass)); + startKp2aIntent.SetAction(Intent.ActionMain); + startKp2aIntent.AddCategory(Intent.CategoryLauncher); + + PendingIntent startKp2APendingIntent = + PendingIntent.GetActivity(this, 0, startKp2aIntent, PendingIntentFlags.UpdateCurrent); + builder.SetContentIntent(startKp2APendingIntent); + + return builder.Build(); + } + #endregion + + #region Unlocked Warning + private Notification GetUnlockedNotification() + { + NotificationCompat.Builder builder = + new NotificationCompat.Builder(this) + .SetOngoing(true) + .SetSmallIcon(Resource.Drawable.ic_unlocked_gray) + .SetLargeIcon(BitmapFactory.DecodeResource(Resources, Resource.Drawable.ic_launcher_red)) + .SetContentTitle(GetText(Resource.String.app_name)) + .SetContentText(GetString(Resource.String.database_loaded_unlocked, GetDatabaseName())); + + builder.SetContentIntent(PendingIntent.GetBroadcast(this, 0, new Intent(Intents.LockDatabase), PendingIntentFlags.UpdateCurrent)); + + return builder.Build(); + } + + private static string GetDatabaseName() + { + var db = App.Kp2a.GetDb().KpDatabase; + var name = db.Name; + if (String.IsNullOrEmpty(name)) + { + name = UrlUtil.StripExtension(UrlUtil.GetFileName(db.IOConnectionInfo.Path)); + } + + return name; + } + + private void LockDatabase() + { + Kp2aLog.Log("LockDatabase"); + StopSelf(); + } + + private void UnlockDatabase() + { + Kp2aLog.Log("UnlockDatabase"); + + // Replace the QuickLock icon with the Unlocked icon. QuickLockEnabled must be true, so we need a foreground service to prevent being killed + StartForeground(ServiceId, GetUnlockedNotification()); + + App.Kp2a.UnlockDatabaseInternal(this); + } + #endregion + + [BroadcastReceiver] + private class Keepass2AndroidServiceBroadcastReceiver: BroadcastReceiver + { + public Keepass2AndroidServiceBroadcastReceiver() + { + //dummy constructor required for MonoForAndroid, not called. + throw new NotImplementedException(); + } + + readonly Keepass2AndroidService _service; + public Keepass2AndroidServiceBroadcastReceiver(Keepass2AndroidService service) + { + _service = service; + } + + public override void OnReceive(Context context, Intent intent) + { + switch (intent.Action) + { + case Intents.Timeout: + _service.Timeout(); + break; + case Intents.LockDatabase: + _service.LockDatabase(); + break; + case Intents.UnlockDatabase: + _service.UnlockDatabase(); + break; + + } + } + } + } +} +