From 6f7d62082e593f04ec776ff7e536de21b9cb771f Mon Sep 17 00:00:00 2001 From: Rishabh Singh Date: Mon, 9 May 2022 12:25:04 +0000 Subject: [PATCH] Clear cache shell commmand Added changes in runClear to clear cache data of the app Bug: 221946754 Test: atest SdkSandboxStorageHostTest#testSdkDataPackageDirectory_IsClearedOnClearCache Change-Id: Ibd61cdec64f51bbc84d6f0536aab877ce0725c6c --- .../server/pm/PackageManagerShellCommand.java | 32 +++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java index 48c6ab010a9ac..b603e21cd8d68 100644 --- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java +++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java @@ -2285,10 +2285,23 @@ class PackageManagerShellCommand extends ShellCommand { } private int runClear() throws RemoteException { + final PrintWriter pw = getOutPrintWriter(); int userId = UserHandle.USER_SYSTEM; - String option = getNextOption(); - if (option != null && option.equals("--user")) { - userId = UserHandle.parseUserArg(getNextArgRequired()); + boolean cacheOnly = false; + + String opt; + while ((opt = getNextOption()) != null) { + switch (opt) { + case "--user": + userId = UserHandle.parseUserArg(getNextArgRequired()); + break; + case "--cache-only": + cacheOnly = true; + break; + default: + pw.println("Error: Unknown option: " + opt); + return 1; + } } String pkg = getNextArg(); @@ -2300,7 +2313,12 @@ class PackageManagerShellCommand extends ShellCommand { final int translatedUserId = translateUserId(userId, UserHandle.USER_NULL, "runClear"); final ClearDataObserver obs = new ClearDataObserver(); - ActivityManager.getService().clearApplicationUserData(pkg, false, obs, translatedUserId); + if (!cacheOnly) { + ActivityManager.getService() + .clearApplicationUserData(pkg, false, obs, translatedUserId); + } else { + mInterface.deleteApplicationCacheFilesAsUser(pkg, translatedUserId, obs); + } synchronized (obs) { while (!obs.finished) { try { @@ -4060,8 +4078,10 @@ class PackageManagerShellCommand extends ShellCommand { pw.println(" --user: remove the app from the given user."); pw.println(" --versionCode: only uninstall if the app has the given version code."); pw.println(""); - pw.println(" clear [--user USER_ID] PACKAGE"); - pw.println(" Deletes all data associated with a package."); + pw.println(" clear [--user USER_ID] [--cache-only] PACKAGE"); + pw.println(" Deletes data associated with a package. Options are:"); + pw.println(" --user: specifies the user for which we need to clear data"); + pw.println(" --cache-only: a flag which tells if we only need to clear cache data"); pw.println(""); pw.println(" enable [--user USER_ID] PACKAGE_OR_COMPONENT"); pw.println(" disable [--user USER_ID] PACKAGE_OR_COMPONENT");