From 312fffa4b942ae796e7051bd766dac8fd4211f75 Mon Sep 17 00:00:00 2001 From: Garfield Tan Date: Wed, 5 Jul 2023 15:24:18 -0700 Subject: [PATCH] Avoid making the user ID dir under system_ce in ATMS The parent directory of recent_images (system_ce/) is managed by other system services, and isn't available until the corresponding user is fully unlocked. Avoid trying to make that folder if that doesn't exist. Also fail the directory creation if it isn't a directory, and we can't create it for recent_images. Bug: 288146194 Test: Recent images and launch params folders are still created when necessary. Test: atest LaunchParamsPersisterTests Change-Id: I7e8e3167e3aea60f6426e5ca3571e3fb1dad98e0 --- .../core/java/com/android/server/wm/LaunchParamsPersister.java | 2 +- services/core/java/com/android/server/wm/TaskPersister.java | 2 +- .../src/com/android/server/wm/LaunchParamsPersisterTests.java | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/wm/LaunchParamsPersister.java b/services/core/java/com/android/server/wm/LaunchParamsPersister.java index bf511adf0bf9a..2394da91684d1 100644 --- a/services/core/java/com/android/server/wm/LaunchParamsPersister.java +++ b/services/core/java/com/android/server/wm/LaunchParamsPersister.java @@ -433,7 +433,7 @@ class LaunchParamsPersister { final byte[] data = saveParamsToXml(); final File launchParamFolder = getLaunchParamFolder(mUserId); - if (!launchParamFolder.isDirectory() && !launchParamFolder.mkdirs()) { + if (!launchParamFolder.isDirectory() && !launchParamFolder.mkdir()) { Slog.w(TAG, "Failed to create folder for " + mUserId); return; } diff --git a/services/core/java/com/android/server/wm/TaskPersister.java b/services/core/java/com/android/server/wm/TaskPersister.java index 29c192cc7c481..f882b9b184530 100644 --- a/services/core/java/com/android/server/wm/TaskPersister.java +++ b/services/core/java/com/android/server/wm/TaskPersister.java @@ -509,7 +509,7 @@ public class TaskPersister implements PersisterQueue.Listener { private static boolean createParentDirectory(String filePath) { File parentDir = new File(filePath).getParentFile(); - return parentDir.exists() || parentDir.mkdirs(); + return parentDir.isDirectory() || parentDir.mkdir(); } private static class TaskWriteQueueItem implements PersisterQueue.WriteQueueItem { diff --git a/services/tests/wmtests/src/com/android/server/wm/LaunchParamsPersisterTests.java b/services/tests/wmtests/src/com/android/server/wm/LaunchParamsPersisterTests.java index 7cb7c79d63a08..2b19ad97e90ca 100644 --- a/services/tests/wmtests/src/com/android/server/wm/LaunchParamsPersisterTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/LaunchParamsPersisterTests.java @@ -107,6 +107,9 @@ public class LaunchParamsPersisterTests extends WindowTestsBase { InstrumentationRegistry.getInstrumentation().getContext().getCacheDir(); mFolder = new File(cacheFolder, "launch_params_tests"); deleteRecursively(mFolder); + mFolder.mkdir(); + mUserFolderGetter.apply(TEST_USER_ID).mkdir(); + mUserFolderGetter.apply(ALTERNATIVE_USER_ID).mkdir(); mDisplayUniqueId = "test:" + sNextUniqueId++; mTestDisplay = new TestDisplayContent.Builder(mAtm, 1000, 1500)