Merge "[UserFileManager] Ensure parent exists." into tm-qpr-dev am: 5a409f7a77

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19415862

Change-Id: Ida618010638cdd8104fa5e88bc00529fdc4dd996
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Aaron Liu
2022-07-27 16:10:07 +00:00
committed by Automerger Merge Worker
2 changed files with 55 additions and 5 deletions

View File

@@ -49,8 +49,8 @@ class UserFileManagerImpl @Inject constructor(
) : UserFileManager, CoreStartable(context) {
companion object {
private const val FILES = "files"
private const val SHARED_PREFS = "shared_prefs"
internal const val ID = "UserFileManager"
@VisibleForTesting internal const val SHARED_PREFS = "shared_prefs"
@VisibleForTesting internal const val ID = "UserFileManager"
}
private val broadcastReceiver = object : BroadcastReceiver() {
@@ -85,13 +85,15 @@ class UserFileManagerImpl @Inject constructor(
fileName
)
} else {
Environment.buildPath(
val secondaryFile = Environment.buildPath(
context.filesDir,
ID,
userId.toString(),
FILES,
fileName
)
ensureParentDirExists(secondaryFile)
secondaryFile
}
}
@@ -114,6 +116,7 @@ class UserFileManagerImpl @Inject constructor(
fileName
)
ensureParentDirExists(secondaryUserDir)
return context.getSharedPreferences(secondaryUserDir, mode)
}
@@ -141,4 +144,18 @@ class UserFileManagerImpl @Inject constructor(
}
}
}
/**
* Checks to see if parent dir of the file exists. If it does not, we create the parent dirs
* recursively.
*/
@VisibleForTesting
internal fun ensureParentDirExists(file: File) {
val parent = file.parentFile
if (!parent.exists()) {
if (!parent.mkdirs()) {
Log.e(ID, "Could not create parent directory for file: ${file.absolutePath}")
}
}
}
}

View File

@@ -31,6 +31,7 @@ import com.android.systemui.util.mockito.eq
import com.android.systemui.util.time.FakeSystemClock
import com.google.common.truth.Truth.assertThat
import java.util.concurrent.Executor
import org.junit.After
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
@@ -62,6 +63,14 @@ class UserFileManagerImplTest : SysuiTestCase() {
broadcastDispatcher, backgroundExecutor)
}
@After
fun end() {
val dir = Environment.buildPath(
context.filesDir,
UserFileManagerImpl.ID)
dir.deleteRecursively()
}
@Test
fun testGetFile() {
assertThat(userFileManager.getFile(TEST_FILE_NAME, 0).path)
@@ -72,8 +81,19 @@ class UserFileManagerImplTest : SysuiTestCase() {
@Test
fun testGetSharedPreferences() {
val secondarySharedPref = userFileManager.getSharedPreferences(TEST_FILE_NAME, 0, 11)
val secondaryUserDir = Environment.buildPath(
context.filesDir,
UserFileManagerImpl.ID,
"11",
UserFileManagerImpl.SHARED_PREFS,
TEST_FILE_NAME
)
assertThat(secondarySharedPref).isNotNull()
assertThat(secondaryUserDir.exists())
assertThat(userFileManager.getSharedPreferences(TEST_FILE_NAME, 0, 0))
.isNotEqualTo(userFileManager.getSharedPreferences(TEST_FILE_NAME, 0, 11))
.isNotEqualTo(secondarySharedPref)
}
@Test
@@ -115,6 +135,19 @@ class UserFileManagerImplTest : SysuiTestCase() {
verify(userManager).aliveUsers
assertThat(secondaryUserDir.exists()).isFalse()
assertThat(file.exists()).isFalse()
dir.deleteRecursively()
}
@Test
fun testEnsureParentDirExists() {
val file = Environment.buildPath(
context.filesDir,
UserFileManagerImpl.ID,
"11",
"files",
TEST_FILE_NAME
)
assertThat(file.parentFile.exists()).isFalse()
userFileManager.ensureParentDirExists(file)
assertThat(file.parentFile.exists()).isTrue()
}
}