Merge "[UserFileManager] Ensure parent exists." into tm-qpr-dev

This commit is contained in:
Aaron Liu
2022-07-27 15:55:48 +00:00
committed by Android (Google) Code Review
2 changed files with 55 additions and 5 deletions

View File

@@ -49,8 +49,8 @@ class UserFileManagerImpl @Inject constructor(
) : UserFileManager, CoreStartable(context) { ) : UserFileManager, CoreStartable(context) {
companion object { companion object {
private const val FILES = "files" private const val FILES = "files"
private const val SHARED_PREFS = "shared_prefs" @VisibleForTesting internal const val SHARED_PREFS = "shared_prefs"
internal const val ID = "UserFileManager" @VisibleForTesting internal const val ID = "UserFileManager"
} }
private val broadcastReceiver = object : BroadcastReceiver() { private val broadcastReceiver = object : BroadcastReceiver() {
@@ -85,13 +85,15 @@ class UserFileManagerImpl @Inject constructor(
fileName fileName
) )
} else { } else {
Environment.buildPath( val secondaryFile = Environment.buildPath(
context.filesDir, context.filesDir,
ID, ID,
userId.toString(), userId.toString(),
FILES, FILES,
fileName fileName
) )
ensureParentDirExists(secondaryFile)
secondaryFile
} }
} }
@@ -114,6 +116,7 @@ class UserFileManagerImpl @Inject constructor(
fileName fileName
) )
ensureParentDirExists(secondaryUserDir)
return context.getSharedPreferences(secondaryUserDir, mode) 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.android.systemui.util.time.FakeSystemClock
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import java.util.concurrent.Executor import java.util.concurrent.Executor
import org.junit.After
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
@@ -62,6 +63,14 @@ class UserFileManagerImplTest : SysuiTestCase() {
broadcastDispatcher, backgroundExecutor) broadcastDispatcher, backgroundExecutor)
} }
@After
fun end() {
val dir = Environment.buildPath(
context.filesDir,
UserFileManagerImpl.ID)
dir.deleteRecursively()
}
@Test @Test
fun testGetFile() { fun testGetFile() {
assertThat(userFileManager.getFile(TEST_FILE_NAME, 0).path) assertThat(userFileManager.getFile(TEST_FILE_NAME, 0).path)
@@ -72,8 +81,19 @@ class UserFileManagerImplTest : SysuiTestCase() {
@Test @Test
fun testGetSharedPreferences() { 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)) assertThat(userFileManager.getSharedPreferences(TEST_FILE_NAME, 0, 0))
.isNotEqualTo(userFileManager.getSharedPreferences(TEST_FILE_NAME, 0, 11)) .isNotEqualTo(secondarySharedPref)
} }
@Test @Test
@@ -115,6 +135,19 @@ class UserFileManagerImplTest : SysuiTestCase() {
verify(userManager).aliveUsers verify(userManager).aliveUsers
assertThat(secondaryUserDir.exists()).isFalse() assertThat(secondaryUserDir.exists()).isFalse()
assertThat(file.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()
} }
} }