Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aa7b526f authored by Rubin Xu's avatar Rubin Xu
Browse files

Remove unnecessary disk access when loading synthetic password states

The on-demand creation of enclosing directory only needs to happen
before writing synthetic password data, not during reads.

Bug: 78027659
Test: runtest frameworks-services -p com.android.server.locksettings
Change-Id: I2a95f919d0d440caacea8880e33663cc074b1567
parent 0d130cbc
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -484,6 +484,7 @@ class LockSettingsStorage {
    }

    public void writeSyntheticPasswordState(int userId, long handle, String name, byte[] data) {
        ensureSyntheticPasswordDirectoryForUser(userId);
        writeFile(getSynthenticPasswordStateFilePathForUser(userId, handle, name), data);
    }

@@ -541,14 +542,19 @@ class LockSettingsStorage {
        return new File(Environment.getDataSystemDeDirectory(userId) ,SYNTHETIC_PASSWORD_DIRECTORY);
    }

    @VisibleForTesting
    protected String getSynthenticPasswordStateFilePathForUser(int userId, long handle,
            String name) {
    /** Ensure per-user directory for synthetic password state exists */
    private void ensureSyntheticPasswordDirectoryForUser(int userId) {
        File baseDir = getSyntheticPasswordDirectoryForUser(userId);
        String baseName = String.format("%016x.%s", handle, name);
        if (!baseDir.exists()) {
            baseDir.mkdir();
        }
    }

    @VisibleForTesting
    protected String getSynthenticPasswordStateFilePathForUser(int userId, long handle,
            String name) {
        final File baseDir = getSyntheticPasswordDirectoryForUser(userId);
        final String baseName = String.format("%016x.%s", handle, name);
        return new File(baseDir, baseName).getAbsolutePath();
    }