package org.greengin.sciencetoolkit; import java.util.HashMap; import java.util.Map.Entry; import org.greengin.sciencetoolkit.common.model.Model; import org.greengin.sciencetoolkit.common.model.SettingsManager; import org.greengin.sciencetoolkit.logic.datalogging.deprecated.DeprecatedDataLogger; import org.greengin.sciencetoolkit.logic.sensors.SensorWrapper; import org.greengin.sciencetoolkit.logic.sensors.SensorWrapperManager; import org.greengin.sciencetoolkit.model.ProfileManager; import android.content.Context; import android.util.Log; import android.widget.Toast; public class VersionManager { public static void check(Context applicationContext) { Model settings = SettingsManager.get().get("version"); int currentVersion = settings.getInt("datamodel", 0); Log.d("stk version", " " + currentVersion); if (currentVersion < 1) { // update ids HashMap<String, String> nameIds = new HashMap<String, String>(); for (Entry<String, SensorWrapper> entry : SensorWrapperManager.get().getSensors().entrySet()) { nameIds.put(entry.getValue().getName(), entry.getKey()); Log.d("stk version", entry.getValue().getName() + " > " + entry.getKey()); } Model selected = SettingsManager.get().get("sensor_list"); for (String name : nameIds.keySet()) { for (String prefix : new String[] { "sensor:", "liveview:", "liveplot:" }) { SettingsManager.get().remove(prefix + name); } selected.clear(name); } for (String profileId : ProfileManager.get().getProfileIds()) { Model profile = ProfileManager.get().get(profileId); Model sensors = profile.getModel("sensors"); for (Model oldSensor : sensors.getModels()) { String name = oldSensor.getString("id"); if (nameIds.containsKey(name)) { String id = nameIds.get(name); Log.d("stk version", profileId + ": " + oldSensor.getString("id") + " > " + id); Model newSensor = oldSensor.cloneModel(sensors); newSensor.setString("id", id); sensors.setModel(id, newSensor); sensors.clear(name); } } } int result = DeprecatedDataLogger.i().exportAllData(); Log.d("stk version", "export: " + result); if (result == 1) { CharSequence text = "This app has changed the way data is stored. Your old data has been saved to the file:\n\ndownloads -> science_toolkit_old_data.csv"; Toast toast = Toast.makeText(applicationContext, text, Toast.LENGTH_LONG); toast.show(); } } if (currentVersion < 2) { for (String profileId : ProfileManager.get().getProfileIds()) { Model profile = ProfileManager.get().get(profileId); Model sensors = profile.getModel("sensors"); int i = 0; for (Model oldSensor : sensors.getModels()) { String oldId = oldSensor.getString("id"); String newId = String.valueOf(i++); Log.d("stk version", profileId + " " + oldId + " > " + newId); Model newSensor = oldSensor.cloneModel(sensors); newSensor.setString("id", newId); newSensor.setString("sensorid", oldId); sensors.setModel(newId, newSensor); sensors.clear(oldId); } } } settings.setInt("datamodel", 2); SettingsManager.get().forceSave(); } }