From 1c620df4b83294fdcb6cb0b9f42bf20c7b0e3834 Mon Sep 17 00:00:00 2001 From: Nikolas Havrikov Date: Thu, 20 Jan 2022 17:46:51 +0100 Subject: [PATCH] Ensure cdm clear cache command persists state This CL ensures that the clear-association-memory-cache shell command immediately persists all user state before dumping clearing caches. This prevents state change updates from getting lost. This is not a critical issue because this shell command is only used for testing, but it allows for more graceful and reliable test code. Test: atest CtsCompanionDeviceManagerCoreTestCases Test: atest CtsCompanionDeviceManagerUiAutomationTestCases Change-Id: Ib981862c587a86bce57c4a5d67c7c18a40b47235 --- .../CompanionDeviceManagerService.java | 19 +++++++++++++++++++ .../CompanionDeviceShellCommand.java | 1 + 2 files changed, 20 insertions(+) diff --git a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java index 6aea92fbe730c..b2b55765f178a 100644 --- a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java +++ b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java @@ -77,6 +77,7 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageItemInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManagerInternal; +import android.content.pm.UserInfo; import android.net.MacAddress; import android.net.NetworkPolicyManager; import android.os.Binder; @@ -1358,6 +1359,17 @@ public class CompanionDeviceManagerService extends SystemService } } + /** + * This method must only be called from {@link CompanionDeviceShellCommand} for testing + * purposes only! + */ + void persistState() { + mUserPersistenceHandler.clearMessages(); + for (UserInfo user : mUserManager.getAliveUsers()) { + persistStateForUser(user.id); + } + } + /** * This class is dedicated to handling requests to persist user state. */ @@ -1376,6 +1388,13 @@ public class CompanionDeviceManagerService extends SystemService } } + /** + * Clears *ALL* outstanding persist requests for *ALL* users. + */ + synchronized void clearMessages() { + removeCallbacksAndMessages(null); + } + @Override public void handleMessage(@NonNull Message msg) { final int userId = msg.what; diff --git a/services/companion/java/com/android/server/companion/CompanionDeviceShellCommand.java b/services/companion/java/com/android/server/companion/CompanionDeviceShellCommand.java index 5f46d5c4c4bf5..9b2bd82fcfede 100644 --- a/services/companion/java/com/android/server/companion/CompanionDeviceShellCommand.java +++ b/services/companion/java/com/android/server/companion/CompanionDeviceShellCommand.java @@ -83,6 +83,7 @@ class CompanionDeviceShellCommand extends android.os.ShellCommand { } break; case "clear-association-memory-cache": { + mService.persistState(); mService.loadAssociationsFromDisk(); } break;