Compare commits

..

33 Commits

Author SHA1 Message Date
Philipp Crocoll
533d92509f fix crowdin.yml file: adjust to renamed folder 2025-02-11 16:03:53 +01:00
PhilippC
46194317a8 Merge pull request #2766 from PhilippC/bugfix/potential-crashes-when-registering-receivers
fix potential crashes
2025-02-11 13:54:23 +01:00
PhilippC
c4d6e18759 Merge pull request #2765 from PhilippC/bugfix/2371-autofill-not-working-with-compose-apps
Fix autofill with Compose apps
2025-02-11 13:21:11 +01:00
Philipp Crocoll
ee41a600b1 fix potential crashes on old Android versions when registering receivers (after upgrade to support target sdk 34) 2025-02-11 13:18:23 +01:00
PhilippC
07562cc5a9 Merge pull request #2744 from midnight-wonderer/bug/hostname-matching
Fix hostname matching logic. closes #1926
2025-02-11 12:33:49 +01:00
Philipp Crocoll
0f5b411dc7 Fix an issue that autofill didn't work with compose apps as described on #2371. Closes #2371. Closes #2590 which is a prototype for this commit. 2025-02-11 12:33:14 +01:00
PhilippC
7577e3064c Merge pull request #2764 from PhilippC/remove-unused-package
remove no-longer required package from dependencies
2025-02-11 12:07:21 +01:00
Philipp Crocoll
d33e1f266c remove no-longer required package from dependencies 2025-02-11 11:12:25 +01:00
PhilippC
aeda21f163 Merge pull request #2762 from PhilippC/i18n-fix
I18n fix for password hint
2025-02-11 08:19:05 +01:00
Philipp Crocoll
4d1142df4d Merge branch 'password-hint-fix' into i18n-fix 2025-02-06 13:03:22 +01:00
Philipp Crocoll
4c632d0c72 fix i18n of a password hint in entry edit 2025-02-06 13:02:28 +01:00
PhilippC
cd75d7cda8 Merge pull request #2761 from PhilippC/feature/target-sdk-34
upgrade to target sdk 34: mark OngoingNotificationsService as Use, register receivers as exported
2025-02-06 12:42:02 +01:00
Philipp Crocoll
deb3701ebf Merge branch 'master' into i18n-fix 2025-02-06 12:30:04 +01:00
PhilippC
2bd0d415b6 Merge pull request #2758 from jonalmeida/patch-1
Remove deprecated Firefox Nightly app ID from trusted browsers
2025-02-06 12:17:20 +01:00
Philipp Crocoll
0bd58bd51f upgrade to target sdk 34: mark OngoingNotificationsService as Special Use, register receivers as exported
(This is required because it is allowed that plugins send intents and also intents from system notifications are not received in NonExported mode)
2025-02-06 12:12:54 +01:00
Philipp Crocoll
d998e08b4f make CreateDatabaseActivity use the blue theme to be more consistent 2025-02-06 11:19:29 +01:00
PhilippC
60e5dc21f1 Merge pull request #2760 from PhilippC/update-onedrive-implementation
Update onedrive implementation
2025-02-06 11:17:28 +01:00
Philipp Crocoll
793341918b cleanup code and fix bug with "My files" variant 2025-02-06 10:40:36 +01:00
Jonathan Almeida
8759fe5346 Remove deprecated Firefox Nightly app ID from trusted browsers
This app ID has not been used for a few years now and can be safely removed. 

See the original PR for added context: https://github.com/PhilippC/keepass2android/pull/896
2025-02-03 18:05:10 -05:00
PhilippC
1b8c0b8a70 Merge pull request #2754 from anttiharju/fix-push-branch-name
Use the right branch name
2025-01-30 10:37:02 +01:00
Philipp Crocoll
087af49514 fix OneDrive implementation for app folder 2025-01-30 09:09:25 +01:00
anttiharju
05e270bde3 Use the right branch name 2025-01-28 22:19:56 +02:00
Philipp Crocoll
7c6ce14348 this is the first attempt to fix the currently broken OneDrive implemenation by upgrading to Graph SDK 5. Unfortunately, the SDK is much harder to use because of a missing abstraction for DriveItems on different places (regular folder, special folder, shared folder) and also doesn't work well, see e.g. https://stackoverflow.com/questions/79374963/list-shared-folders-with-graph-sdk or https://stackoverflow.com/questions/79374845/graph-sdk-c-missing-methods-for-working-with-app-folder. 2025-01-21 16:23:07 +01:00
PhilippC
fdfa2b0bf2 Merge pull request #2747 from dktapps/patch-1
fix readme logo
2025-01-21 07:53:18 +01:00
Dylan T.
3fde725657 fix readme logo 2025-01-15 00:16:52 +00:00
PhilippC
146f181682 Merge pull request #2745 from PhilippC/argon2-fix
fix issue with argon2 kdf
2025-01-14 16:50:08 +01:00
PhilippC
1094b43009 Merge pull request #2746 from PhilippC/bugfix/refresh-number-of-entries-in-group
fix: number of entries in group did not immediately update
2025-01-14 16:49:54 +01:00
Philipp Crocoll
379d43e2b8 Merge remote-tracking branch 'remotes/origin/update-libs-and-tools' 2025-01-14 15:30:46 +01:00
Philipp Crocoll
090bc6249a fix: number of entries in group did not immediately update when adding entries 2025-01-14 15:29:22 +01:00
Sarun Rattanasiri
980df2b3a7 fix hostname matching logic 2025-01-14 17:24:48 +07:00
PhilippC
830494851d Merge pull request #2734 from anttiharju/prevent-duplicate-CI-runs
Prevent duplicate CI runs in PRs
2024-12-31 11:34:24 +01:00
anttiharju
6e30dd35ee Prevent duplicate runs in PRs 2024-12-20 08:11:26 +02:00
快乐小牛
f001d1fa54 fix: entry_edit hint i18n 2024-10-30 11:48:23 +08:00
26 changed files with 470 additions and 271 deletions

View File

@@ -1,6 +1,10 @@
name: Build keepass2android app
on: [push, pull_request]
on:
push:
branches:
- master
pull_request:
jobs:
# macos:

View File

@@ -1,7 +1,7 @@
files:
- source: src/keepass2android/Resources/values/strings.xml
- source: src/keepass2android-app/Resources/values/strings.xml
translation: >-
/src/keepass2android/Resources/values-%two_letters_code%/%original_file_name%
/src/keepass2android-app/Resources/values-%two_letters_code%/%original_file_name%
translate_attributes: '0'
content_segmentation: '0'
languages_mapping:

View File

@@ -1,4 +1,4 @@
<h1 align="center"><img src="/src/keepass2android/Resources/mipmap-xxxhdpi/ic_launcher_online.png" align="center" width="100" alt="Keepass2Android Logo">Keepass2Android</h1>
<h1 align="center"><img src="/src/keepass2android-app/Resources/mipmap-xxxhdpi/ic_launcher_online.png" align="center" width="100" alt="Keepass2Android Logo">Keepass2Android</h1>
# What is Keepass2Android?

View File

@@ -730,7 +730,7 @@ namespace Kp2aAutofillParser
{
public List<TField> InputFields { get; set; } = new List<TField>();
public string PackageId { get; set; } = null;
public string? PackageId { get; set; } = null;
public string WebDomain { get; set; } = null;
}

File diff suppressed because it is too large Load Diff

View File

@@ -11,9 +11,9 @@
<ItemGroup>
<PackageReference Include="FluentFTP" Version="51.1.0" />
<PackageReference Include="MegaApiClient" Version="1.10.4" />
<PackageReference Include="Microsoft.Graph" Version="1.21.0" />
<PackageReference Include="Microsoft.Graph.Auth" Version="1.0.0-preview.7" />
<PackageReference Include="Microsoft.Identity.Client" Version="4.49.1" />
<PackageReference Include="Microsoft.Graph" Version="5.68.0" />
<PackageReference Include="Microsoft.Identity.Client" Version="4.67.1" />
<PackageReference Include="Xamarin.AndroidX.Browser" Version="1.8.0" />
<PackageReference Include="Xamarin.AndroidX.Core" Version="1.13.1.5" />
<PackageReference Include="Xamarin.Google.Android.Material" Version="1.11.0.3" />
</ItemGroup>

View File

@@ -138,7 +138,8 @@ namespace keepass2android
{
continue;
}
if (host.IndexOf(otherHost, StringComparison.InvariantCultureIgnoreCase) > -1)
if (string.Equals(host, otherHost, StringComparison.OrdinalIgnoreCase) ||
host.EndsWith("." + otherHost, StringComparison.OrdinalIgnoreCase))
{
pgResults.AddEntry(entry, false);
}

View File

@@ -90,10 +90,15 @@ namespace keepass2android
// Mark parent group dirty
_app.DirtyGroups.Add(parent);
// even mark the parent of the parent dirty to update the views showing the number of child entries
if (parent?.ParentGroup != null)
{
_app.DirtyGroups.Add(parent.ParentGroup);
}
} else
} else
{
StatusLogger.UpdateMessage(UiStringKey.UndoingChanges);
//TODO test fail

View File

@@ -356,7 +356,13 @@ public class KP2AKeyboard extends InputMethodService
pFilter.addAction("android.intent.action.PACKAGE_ADDED");
pFilter.addAction("android.intent.action.PACKAGE_REPLACED");
pFilter.addAction("android.intent.action.PACKAGE_REMOVED");
registerReceiver(mPluginManager, pFilter);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
registerReceiver(mPluginManager, pFilter, RECEIVER_EXPORTED);
}
else
{
registerReceiver(mPluginManager, pFilter);
}
LatinIMEUtil.GCUtils.getInstance().reset();
@@ -375,16 +381,28 @@ public class KP2AKeyboard extends InputMethodService
// register to receive ringer mode changes for silent mode
IntentFilter filter = new IntentFilter(AudioManager.RINGER_MODE_CHANGED_ACTION);
registerReceiver(mSilentModeReceiver, filter);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
registerReceiver(mSilentModeReceiver, filter, RECEIVER_EXPORTED);
}
else
{
registerReceiver(mSilentModeReceiver, filter);
}
prefs.registerOnSharedPreferenceChangeListener(this);
//check if we have KP2A data available:
mHadKp2aData = mShowKp2aKeyboard = keepass2android.kbbridge.KeyboardData.hasData();
mHadKp2aData = mShowKp2aKeyboard = KeyboardData.hasData();
mClearKeyboardReceiver = new ClearKeyboardBroadcastReceiver();
registerReceiver(mClearKeyboardReceiver, new IntentFilter(get_KEEPASS2ANDROID_KEYBOARD_CLEARED(this)));
android.util.Log.d("KP2AK", "registered receiver for clear keyboard broadcast: "+get_KEEPASS2ANDROID_KEYBOARD_CLEARED(this));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
registerReceiver(mClearKeyboardReceiver, new IntentFilter(get_KEEPASS2ANDROID_KEYBOARD_CLEARED(this)), RECEIVER_EXPORTED);
}
else
{
registerReceiver(mClearKeyboardReceiver, new IntentFilter(get_KEEPASS2ANDROID_KEYBOARD_CLEARED(this)));
}
Log.d("KP2AK", "registered receiver for clear keyboard broadcast: "+get_KEEPASS2ANDROID_KEYBOARD_CLEARED(this));
}

View File

@@ -20,7 +20,7 @@ namespace keepass2android
{
[Activity(Label = "@string/app_name",
ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.KeyboardHidden,
Theme = "@style/Kp2aTheme_ActionBar")]
Theme = "@style/Kp2aTheme_BlueActionBar")]
public class CreateDatabaseActivity : LifecycleAwareActivity
{
private IOConnectionInfo _ioc;

View File

@@ -53,6 +53,7 @@ using keepass2android.fileselect;
using KeeTrayTOTP.Libraries;
using Boolean = Java.Lang.Boolean;
using Android.Util;
using AndroidX.Core.Content;
using Google.Android.Material.Dialog;
using keepass2android;
@@ -491,9 +492,9 @@ namespace keepass2android
App.Kp2a.LastOpenedEntry = new PwEntryOutput(Entry, App.Kp2a.CurrentDb);
_pluginActionReceiver = new PluginActionReceiver(this);
RegisterReceiver(_pluginActionReceiver, new IntentFilter(Strings.ActionAddEntryAction));
ContextCompat.RegisterReceiver(this, _pluginActionReceiver, new IntentFilter(Strings.ActionAddEntryAction), (int)ReceiverFlags.Exported);
_pluginFieldReceiver = new PluginFieldReceiver(this);
RegisterReceiver(_pluginFieldReceiver, new IntentFilter(Strings.ActionSetEntryField));
ContextCompat.RegisterReceiver(this, _pluginFieldReceiver, new IntentFilter(Strings.ActionSetEntryField), (int)ReceiverFlags.Exported);
var notifyPluginsOnOpenThread = new Thread(NotifyPluginsOnOpen);
notifyPluginsOnOpenThread.Start();

View File

@@ -21,6 +21,7 @@ using Android.OS;
using Android.Preferences;
using Android.Runtime;
using Android.Views;
using AndroidX.Core.Content;
using KeePassLib.Serialization;
namespace keepass2android
@@ -69,7 +70,7 @@ namespace keepass2android
IntentFilter filter = new IntentFilter();
filter.AddAction(Intents.DatabaseLocked);
filter.AddAction(Intent.ActionScreenOff);
RegisterReceiver(_intentReceiver, filter);
ContextCompat.RegisterReceiver(this, _intentReceiver, filter, (int)ReceiverFlags.Exported);
}
protected override void OnDestroy()

View File

@@ -21,6 +21,7 @@ using Android.OS;
using Android.Preferences;
using Android.Runtime;
using Android.Views;
using AndroidX.Core.Content;
using KeePassLib.Serialization;
namespace keepass2android
@@ -55,7 +56,7 @@ namespace keepass2android
filter.AddAction(Intents.DatabaseLocked);
filter.AddAction(Intent.ActionScreenOff);
RegisterReceiver(_intentReceiver, filter);
ContextCompat.RegisterReceiver(this, _intentReceiver, filter, (int)ReceiverFlags.Exported);
}

View File

@@ -18,6 +18,7 @@ This file is part of Keepass2Android, Copyright 2013 Philipp Crocoll. This file
using System;
using Android.Content;
using Android.OS;
using AndroidX.Core.Content;
using KeePassLib.Serialization;
namespace keepass2android
@@ -39,7 +40,7 @@ namespace keepass2android
_intentReceiver = new LockCloseActivityBroadcastReceiver(this);
IntentFilter filter = new IntentFilter();
filter.AddAction(Intents.DatabaseLocked);
RegisterReceiver(_intentReceiver, filter);
ContextCompat.RegisterReceiver(this, _intentReceiver, filter, (int)ReceiverFlags.Exported);
}
protected override void OnResume() {

View File

@@ -43,7 +43,7 @@
</queries>
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="33" />
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="34" />
<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" />
<application
@@ -256,6 +256,7 @@ The scheme=file is still there for old OS devices. It's also queried by apps lik
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" android:maxSdkVersion="22" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" android:maxSdkVersion="22" />
<uses-permission android:name="keepass2android.keepass2android_debug.permission.KP2aInternalFileBrowsing" />

View File

@@ -42,7 +42,7 @@
<action android:name="android.intent.action.VIEW" />
</intent>
</queries>
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="33" />
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="34" />
<permission android:description="@string/permission_desc2" android:icon="@drawable/ic_launcher" android:label="KP2A entry search" android:name="keepass2android.keepass2android.permission.KP2aInternalSearch" android:protectionLevel="signature" />
<permission android:description="@string/permission_desc3" android:icon="@drawable/ic_launcher" android:label="KP2A choose autofill dataset" android:name="keepass2android.keepass2android.permission.Kp2aChooseAutofill" android:protectionLevel="signature" />
@@ -270,6 +270,7 @@ The scheme=file is still there for old OS devices. It's also queried by apps lik
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" android:maxSdkVersion="22" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" android:maxSdkVersion="22" />
<uses-permission android:name="keepass2android.keepass2android.permission.KP2aInternalFileBrowsing" />

View File

@@ -40,7 +40,7 @@
</intent>
</queries>
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="33" />
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="34" />
<permission android:description="@string/permission_desc2" android:icon="@drawable/ic_launcher_offline" android:label="KP2A entry search" android:name="keepass2android.keepass2android_nonet.permission.KP2aInternalSearch" android:protectionLevel="signature" />
<permission android:description="@string/permission_desc3" android:icon="@drawable/ic_launcher_offline" android:label="KP2A choose autofill dataset" android:name="keepass2android.keepass2android_nonet.permission.Kp2aChooseAutofill" android:protectionLevel="signature" />
<application

View File

@@ -65,6 +65,7 @@ using Enum = System.Enum;
using Exception = System.Exception;
using String = System.String;
using Toolbar = AndroidX.AppCompat.Widget.Toolbar;
using AndroidX.Core.Content;
namespace keepass2android
{
@@ -647,7 +648,7 @@ namespace keepass2android
_intentReceiver = new PasswordActivityBroadcastReceiver(this);
IntentFilter filter = new IntentFilter();
filter.AddAction(Intent.ActionScreenOff);
RegisterReceiver(_intentReceiver, filter);
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

View File

@@ -34,6 +34,7 @@ using keepass2android;
using KeePassLib;
using KeePassLib.Serialization;
using Toolbar = AndroidX.AppCompat.Widget.Toolbar;
using AndroidX.Core.Content;
namespace keepass2android
{
@@ -153,7 +154,7 @@ namespace keepass2android
_intentReceiver = new QuickUnlockBroadcastReceiver(this);
IntentFilter filter = new IntentFilter();
filter.AddAction(Intents.DatabaseLocked);
RegisterReceiver(_intentReceiver, filter);
ContextCompat.RegisterReceiver(this, _intentReceiver, filter, (int)ReceiverFlags.Exported);
Util.SetNoPersonalizedLearning(FindViewById<EditText>(Resource.Id.QuickUnlock_password));
@@ -503,8 +504,6 @@ namespace keepass2android
}
}
}
}
}

View File

@@ -69,6 +69,7 @@
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.textfield.TextInputLayout
@@ -82,7 +83,7 @@
android:layout_height="wrap_content"
android:singleLine="true"
android:inputType="textPassword"
android:hint="password"
android:hint="@string/hint_pass"
android:importantForAccessibility="no"/>
</com.google.android.material.textfield.TextInputLayout>
<LinearLayout
@@ -135,6 +136,7 @@
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:id="@+id/entry_extras_container"
style="@style/EntryEditSingleLine_container">
<ImageView
@@ -173,6 +175,7 @@
</LinearLayout>
<!-- file attachments -->
<LinearLayout
android:orientation="vertical"
android:id="@+id/entry_binaries_container"
style="@style/EntryEditSingleLine_container">
<ImageView
@@ -228,6 +231,7 @@
</LinearLayout>
<!--expires-->
<LinearLayout
android:orientation="vertical"
android:id="@+id/expires_section"
style="@style/EntryEditSingleLine_container">
<ImageView

View File

@@ -26,6 +26,7 @@ using KeePassLib.Keys;
using KeePassLib.Serialization;
using Console = System.Console;
using Object = Java.Lang.Object;
using AndroidX.Core.Content;
namespace keepass2android
{
@@ -343,7 +344,7 @@ namespace keepass2android
IntentFilter filter = new IntentFilter();
filter.AddAction(Intents.DatabaseLocked);
filter.AddAction(Intent.ActionScreenOff);
RegisterReceiver(_intentReceiver, filter);
ContextCompat.RegisterReceiver(this, _intentReceiver, filter, (int)ReceiverFlags.Exported);
}
}

View File

@@ -1342,7 +1342,7 @@ namespace keepass2android
intentFilter.AddAction(Intents.LockDatabase);
intentFilter.AddAction(Intents.LockDatabaseByTimeout);
intentFilter.AddAction(Intents.CloseDatabase);
Context.RegisterReceiver(broadcastReceiver, intentFilter);
ContextCompat.RegisterReceiver(Context, broadcastReceiver, intentFilter, (int)ReceiverFlags.Exported);
//ZXing.Net.Mobile.Forms.Android.Platform.Init();
}

View File

@@ -71,7 +71,7 @@ namespace keepass2android.services.AutofillBase
static readonly HashSet<string> _trustedBrowsers = new HashSet<string>
{
"org.mozilla.firefox","org.mozilla.firefox_beta","org.mozilla.klar","org.mozilla.focus",
"org.mozilla.fenix","org.mozilla.fenix.nightly","org.mozilla.reference.browser",
"org.mozilla.fenix","org.mozilla.reference.browser",
"com.android.browser","com.android.chrome","com.chrome.beta","com.chrome.dev","com.chrome.canary",
"com.google.android.apps.chrome","com.google.android.apps.chrome_dev",
"com.opera.browser","com.opera.browser.beta","com.opera.mini.native","com.opera.mini.native.beta","com.opera.touch",

View File

@@ -86,6 +86,8 @@ namespace keepass2android.services.AutofillBase
ParseRecursive(autofillView, view, isManualRequest);
}
autofillView.PackageId = autofillView.PackageId ?? _structure.ActivityComponent.PackageName;
return autofillView;
}
@@ -122,7 +124,6 @@ namespace keepass2android.services.AutofillBase
}
autofillView.InputFields.Add(new ViewNodeInputField(viewNode));
var childrenSize = viewNode.ChildCount;
if (childrenSize > 0)
{

View File

@@ -39,6 +39,7 @@ using KeePass.Util.Spr;
using keepass2android;
using KeePassLib.Serialization;
using PluginTOTP;
using AndroidX.Core.Content;
namespace keepass2android
{
@@ -322,7 +323,8 @@ namespace keepass2android
_stopOnLockBroadcastReceiver = new StopOnLockBroadcastReceiver(this);
IntentFilter filter = new IntentFilter();
filter.AddAction(Intents.DatabaseLocked);
RegisterReceiver(_stopOnLockBroadcastReceiver, filter);
ContextCompat.RegisterReceiver(this, _stopOnLockBroadcastReceiver, filter, (int)ReceiverFlags.Exported);
}
if ((intent.Action == Intents.ShowNotification) || (intent.Action == Intents.UpdateKeyboard))
@@ -529,7 +531,7 @@ namespace keepass2android
_notificationDeletedBroadcastReceiver = new NotificationDeletedBroadcastReceiver(this);
IntentFilter deletefilter = new IntentFilter();
deletefilter.AddAction(ActionNotificationCancelled);
RegisterReceiver(_notificationDeletedBroadcastReceiver, deletefilter);
ContextCompat.RegisterReceiver(this, _notificationDeletedBroadcastReceiver, deletefilter, (int)ReceiverFlags.Exported);
}
}

View File

@@ -18,10 +18,12 @@ This file is part of Keepass2Android, Copyright 2013 Philipp Crocoll. This file
using System;
using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.Graphics;
using Android.OS;
using Android.Preferences;
using AndroidX.Core.App;
using AndroidX.Core.Content;
using keepass2android;
using KeePassLib.Utility;
@@ -37,7 +39,9 @@ namespace keepass2android
/// used by the user. This ensures the database is kept in memory (until Android kills it due to low memory).
/// It is important to also have a foreground service also for the "unlocked" state because it's really
/// irritating if the db is closed while switching between apps.
[Service]
[Service(ForegroundServiceType = ForegroundService.TypeSpecialUse )]
[MetaData("android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE", Value = " This service is running as foreground service to keep the app alive even when it's not currently used by the user. This ensures the database is kept in memory (until Android kills it due to low memory). It is important to also have a foreground service also for the \"unlocked\" state because it's really irritating if the db is closed while switching between apps.")]
public class OngoingNotificationsService : Service
{
protected override void AttachBaseContext(Context baseContext)
@@ -57,8 +61,8 @@ namespace keepass2android
_screenOffReceiver = new ScreenOffReceiver();
IntentFilter filter = new IntentFilter();
filter.AddAction(Intent.ActionScreenOff);
RegisterReceiver(_screenOffReceiver, filter);
}
ContextCompat.RegisterReceiver(this, _screenOffReceiver, filter, (int)ReceiverFlags.Exported);
}
public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)