package com.lody.virtual.server.vs; import android.os.Parcel; import android.util.SparseArray; import com.lody.virtual.helper.PersistenceLayer; import com.lody.virtual.os.VEnvironment; import java.util.Arrays; import java.util.HashMap; import java.util.Map; /** * @author Lody */ class VSPersistenceLayer extends PersistenceLayer { private static final char[] MAGIC = {'v', 's', 'a'}; private static final int CURRENT_VERSION = 1; private final VirtualStorageService mService; VSPersistenceLayer(VirtualStorageService service) { super(VEnvironment.getVSConfigFile()); this.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) { final SparseArray<HashMap<String, VSConfig>> configs = mService.getConfigs(); int N = configs.size(); p.writeInt(N); while (N-- > 0) { int userId = configs.keyAt(N); Map<String, VSConfig> userMap = configs.valueAt(N); p.writeInt(userId); p.writeMap(userMap); } } @Override public void readPersistenceData(Parcel p) { final SparseArray<HashMap<String, VSConfig>> configs = mService.getConfigs(); int N = p.readInt(); while (N-- > 0) { int userId = p.readInt(); //noinspection unchecked HashMap<String, VSConfig> userMap = p.readHashMap(VSConfig.class.getClassLoader()); configs.put(userId, userMap); } } @Override public boolean onVersionConflict(int fileVersion, int currentVersion) { return false; } @Override public void onPersistenceFileDamage() { } }