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

Commit fd6d63ec authored by Ben Murdoch's avatar Ben Murdoch Committed by Automerger Merge Worker
Browse files

Cherry pick: Batch calls to create app data for new users. DO NOT MERGE am:...

Cherry pick: Batch calls to create app data for new users. DO NOT MERGE am: 5ecf6fba am: 1b125706

Change-Id: I97e7661c8929c9c8dc46fda3e12653d7ef7725e7
parents a898c245 1b125706
Loading
Loading
Loading
Loading
+25 −0
Original line number Original line Diff line number Diff line
@@ -39,6 +39,7 @@ import dalvik.system.BlockGuard;
import dalvik.system.VMRuntime;
import dalvik.system.VMRuntime;


import java.io.FileDescriptor;
import java.io.FileDescriptor;
import java.util.Arrays;


public class Installer extends SystemService {
public class Installer extends SystemService {
    private static final String TAG = "Installer";
    private static final String TAG = "Installer";
@@ -186,6 +187,30 @@ public class Installer extends SystemService {
        }
        }
    }
    }


    /**
     * Batched version of createAppData for use with multiple packages.
     */
    public void createAppDataBatched(String[] uuids, String[] packageNames, int userId, int flags,
            int[] appIds, String[] seInfos, int[] targetSdkVersions) throws InstallerException {
        if (!checkBeforeRemote()) return;
        final int batchSize = 256;
        for (int i = 0; i < uuids.length; i += batchSize) {
            int to = i + batchSize;
            if (to > uuids.length) {
                to = uuids.length;
            }

            try {
                mInstalld.createAppDataBatched(Arrays.copyOfRange(uuids, i, to),
                        Arrays.copyOfRange(packageNames, i, to), userId, flags,
                        Arrays.copyOfRange(appIds, i, to), Arrays.copyOfRange(seInfos, i, to),
                        Arrays.copyOfRange(targetSdkVersions, i, to));
            } catch (Exception e) {
                throw InstallerException.from(e);
            }
        }
    }

    public void restoreconAppData(String uuid, String packageName, int userId, int flags, int appId,
    public void restoreconAppData(String uuid, String packageName, int userId, int flags, int appId,
            String seInfo) throws InstallerException {
            String seInfo) throws InstallerException {
        if (!checkBeforeRemote()) return;
        if (!checkBeforeRemote()) return;
+6 −12
Original line number Original line Diff line number Diff line
@@ -4207,19 +4207,13 @@ public final class Settings {
            }
            }
        }
        }
        t.traceBegin("createAppData");
        t.traceBegin("createAppData");
        for (int i = 0; i < packagesCount; i++) {
            if (names[i] == null) {
                continue;
            }
            // TODO: triage flags!
        final int flags = StorageManager.FLAG_STORAGE_CE | StorageManager.FLAG_STORAGE_DE;
        final int flags = StorageManager.FLAG_STORAGE_CE | StorageManager.FLAG_STORAGE_DE;
        try {
        try {
                installer.createAppData(volumeUuids[i], names[i], userHandle, flags, appIds[i],
            installer.createAppDataBatched(volumeUuids, names, userHandle, flags, appIds, seinfos,
                        seinfos[i], targetSdkVersions[i]);
                    targetSdkVersions);
        } catch (InstallerException e) {
        } catch (InstallerException e) {
            Slog.w(TAG, "Failed to prepare app data", e);
            Slog.w(TAG, "Failed to prepare app data", e);
        }
        }
        }
        t.traceEnd(); // createAppData
        t.traceEnd(); // createAppData
        synchronized (mLock) {
        synchronized (mLock) {
            applyDefaultPreferredAppsLPw(userHandle);
            applyDefaultPreferredAppsLPw(userHandle);