Avoid making the user ID dir under system_ce in ATMS

The parent directory of recent_images (system_ce/<user_id>) 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
This commit is contained in:
Garfield Tan
2023-07-05 15:24:18 -07:00
parent d3813b1887
commit 312fffa4b9
3 changed files with 5 additions and 2 deletions

View File

@@ -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;
}

View File

@@ -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 {

View File

@@ -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)