package io.virtualapp.home.repo; import com.lody.virtual.client.core.VirtualCore; import com.lody.virtual.remote.InstalledAppInfo; import java.util.HashMap; import java.util.Map; import io.virtualapp.VApp; import io.virtualapp.abs.Callback; import io.virtualapp.abs.ui.VUiKit; import io.virtualapp.home.models.PackageAppData; /** * @author Lody * <p> * Cache the loaded PackageAppData. */ public class PackageAppDataStorage { private static final PackageAppDataStorage STORAGE = new PackageAppDataStorage(); private final Map<String, PackageAppData> packageDataMap = new HashMap<>(); public static PackageAppDataStorage get() { return STORAGE; } public PackageAppData acquire(String packageName) { PackageAppData data; synchronized (packageDataMap) { data = packageDataMap.get(packageName); if (data == null) { data = loadAppData(packageName); } } return data; } public void acquire(String packageName, Callback<PackageAppData> callback) { VUiKit.defer() .when(() -> acquire(packageName)) .done(callback::callback); } private PackageAppData loadAppData(String packageName) { InstalledAppInfo setting = VirtualCore.get().getInstalledAppInfo(packageName, 0); if (setting != null) { PackageAppData data = new PackageAppData(VApp.getApp(), setting); synchronized (packageDataMap) { packageDataMap.put(packageName, data); } return data; } return null; } }