package com.lody.virtual.server.pm;
import android.os.Parcel;
import com.lody.virtual.helper.PersistenceLayer;
import com.lody.virtual.os.VEnvironment;
import com.lody.virtual.server.pm.parser.VPackage;
import java.util.Arrays;
/**
* @author Lody
*/
class PackagePersistenceLayer extends PersistenceLayer {
private static final char[] MAGIC = {'v', 'p', 'k', 'g'};
private static final int CURRENT_VERSION = 3;
private VAppManagerService mService;
PackagePersistenceLayer(VAppManagerService service) {
super(VEnvironment.getPackageListFile());
mService = service;
}
@Override
public int getCurrentVersion() {
return CURRENT_VERSION;
}
@Override
public void writeMagic(Parcel p) {
p.writeCharArray(MAGIC);
}
@Override
public boolean verifyMagic(Parcel p) {
char[] magic = p.createCharArray();
return Arrays.equals(magic, MAGIC);
}
@Override
public void writePersistenceData(Parcel p) {
synchronized (PackageCacheManager.PACKAGE_CACHE) {
p.writeInt(PackageCacheManager.PACKAGE_CACHE.size());
for (VPackage pkg : PackageCacheManager.PACKAGE_CACHE.values()) {
PackageSetting ps = (PackageSetting) pkg.mExtras;
ps.writeToParcel(p, 0);
}
}
}
@Override
public void readPersistenceData(Parcel p) {
int count = p.readInt();
while (count-- > 0) {
PackageSetting setting = new PackageSetting(p);
mService.loadPackage(setting);
}
}
@Override
public boolean onVersionConflict(int fileVersion, int currentVersion) {
// I am so lazy to process it...
return false;
}
@Override
public void onPersistenceFileDamage() {
getPersistenceFile().delete();
VAppManagerService.get().restoreFactoryState();
}
}