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

Commit 215d261e authored by Automerger Merge Worker's avatar Automerger Merge Worker
Browse files

Merge "Merge "UserDataPreparer: fix volume preparation order" am: 0c0888da...

Merge "Merge "UserDataPreparer: fix volume preparation order" am: 0c0888da am: 5e3ed272" into tm-dev-plus-aosp am: 9514f87b am: 11c728a1 am: a02b76bf

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



Change-Id: I97e1a4332e9847f49783d9720b9be676f3c00d68
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 5d54e2c3 a02b76bf
Loading
Loading
Loading
Loading
+16 −2
Original line number Diff line number Diff line
@@ -68,12 +68,19 @@ class UserDataPreparer {
    void prepareUserData(int userId, int userSerial, int flags) {
        synchronized (mInstallLock) {
            final StorageManager storage = mContext.getSystemService(StorageManager.class);
            /*
             * Internal storage must be prepared before adoptable storage, since the user's volume
             * keys are stored in their internal storage.
             */
            prepareUserDataLI(null /* internal storage */, userId, userSerial, flags, true);
            for (VolumeInfo vol : storage.getWritablePrivateVolumes()) {
                final String volumeUuid = vol.getFsUuid();
                if (volumeUuid != null) {
                    prepareUserDataLI(volumeUuid, userId, userSerial, flags, true);
                }
            }
        }
    }

    private void prepareUserDataLI(String volumeUuid, int userId, int userSerial, int flags,
            boolean allowRecover) {
@@ -134,11 +141,18 @@ class UserDataPreparer {
    void destroyUserData(int userId, int flags) {
        synchronized (mInstallLock) {
            final StorageManager storage = mContext.getSystemService(StorageManager.class);
            /*
             * Volume destruction order isn't really important, but to avoid any weird issues we
             * process internal storage last, the opposite of prepareUserData.
             */
            for (VolumeInfo vol : storage.getWritablePrivateVolumes()) {
                final String volumeUuid = vol.getFsUuid();
                if (volumeUuid != null) {
                    destroyUserDataLI(volumeUuid, userId, flags);
                }
            }
            destroyUserDataLI(null /* internal storage */, userId, flags);
        }
    }

    void destroyUserDataLI(String volumeUuid, int userId, int flags) {