From 3c6be8082085330f8343cd13e0b723de5ec535cf Mon Sep 17 00:00:00 2001 From: zHd4 <38856321+zHd4@users.noreply.github.com> Date: Fri, 17 Jul 2026 11:39:31 +0200 Subject: [PATCH 1/2] Clear secret cache on task removal to enhance security in AppCloseAndroidService --- .../notesr/service/lifecycle/AppCloseAndroidService.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/service/src/main/java/app/notesr/service/lifecycle/AppCloseAndroidService.java b/service/src/main/java/app/notesr/service/lifecycle/AppCloseAndroidService.java index 68948ae6..30907179 100644 --- a/service/src/main/java/app/notesr/service/lifecycle/AppCloseAndroidService.java +++ b/service/src/main/java/app/notesr/service/lifecycle/AppCloseAndroidService.java @@ -17,7 +17,7 @@ import androidx.annotation.Nullable; import androidx.core.app.NotificationCompat; -import app.notesr.core.security.crypto.CryptoManager; +import app.notesr.core.security.SecretCache; import app.notesr.core.security.crypto.CryptoManagerProvider; import app.notesr.data.DatabaseProvider; import app.notesr.service.AndroidService; @@ -81,6 +81,7 @@ protected AndroidServiceEntry getEntry(String payload, String state) { @Override public void onTaskRemoved(Intent rootIntent) { if (getOtherRunningServicesCount() == 0) { + clearSecretCache(); closeDatabase(); destroySecrets(); @@ -116,6 +117,10 @@ long getOtherRunningServicesCount() { .count(); } + void clearSecretCache() { + SecretCache.clear(); + } + void closeDatabase() { DatabaseProvider.close(); } From 2168b6f34391c8d48d36edb83d54c2fdada5297e Mon Sep 17 00:00:00 2001 From: zHd4 <38856321+zHd4@users.noreply.github.com> Date: Fri, 17 Jul 2026 11:40:07 +0200 Subject: [PATCH 2/2] Update AppCloseAndroidServiceTest to verify secret cache clearance on task removal --- .../service/lifecycle/AppCloseAndroidServiceTest.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/service/src/test/java/app/notesr/service/lifecycle/AppCloseAndroidServiceTest.java b/service/src/test/java/app/notesr/service/lifecycle/AppCloseAndroidServiceTest.java index 86d68379..6ca161cc 100644 --- a/service/src/test/java/app/notesr/service/lifecycle/AppCloseAndroidServiceTest.java +++ b/service/src/test/java/app/notesr/service/lifecycle/AppCloseAndroidServiceTest.java @@ -33,6 +33,7 @@ void setUp() { @Test void testOnTaskRemovedWhenNoOtherServicesRunningClosesEverythingAndExits() { doReturn(0L).when(service).getOtherRunningServicesCount(); + doNothing().when(service).clearSecretCache(); doNothing().when(service).closeDatabase(); doNothing().when(service).destroySecrets(); doNothing().when(service).stopForegroundService(); @@ -44,6 +45,9 @@ void testOnTaskRemovedWhenNoOtherServicesRunningClosesEverythingAndExits() { service.onTaskRemoved(intent); + verify(service, description("Secret cache should be cleared" + + " when no other services are running")) + .clearSecretCache(); verify(service, description("Database should be closed" + " when no other services are running")) .closeDatabase(); @@ -74,6 +78,9 @@ void testOnTaskRemovedWhenOtherServicesRunningOnlyStopsSelf() { service.onTaskRemoved(intent); + verify(service, never().description("Secret cache should NOT be cleared" + + " when other services are running")) + .clearSecretCache(); verify(service, never().description("Database should NOT be closed" + " when other services are running")) .closeDatabase();