package com.openvehicles.OVMS.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.ArrayList; import android.content.Context; import android.content.SharedPreferences; import android.preference.PreferenceManager; import android.text.TextUtils; import android.util.Log; import com.openvehicles.OVMS.BaseApp; import com.openvehicles.OVMS.entities.CarData; public class CarsStorage { private static final String TAG = "CarsStorage"; private static CarsStorage sInstance; private final Context mContext = BaseApp.getApp(); private ArrayList<CarData> mStoredCars; private String mLastSelectedCarId; private SharedPreferences mPreferences; public static CarsStorage get() { if (sInstance == null) { sInstance = new CarsStorage(); } return sInstance; } @SuppressWarnings("unchecked") public ArrayList<CarData> getStoredCars() { if (mStoredCars != null) return mStoredCars; File storedFile = new File(mContext.getFilesDir()+ "/" + Consts.STOREDCARS_FILENAME); if (!storedFile.exists()) { mStoredCars = new ArrayList<CarData>(); initDemoCar(); return mStoredCars; } Log.v(TAG, "Loading cars from file: " + storedFile); try { FileInputStream fis = new FileInputStream(storedFile); ObjectInputStream is = new ObjectInputStream(fis); mStoredCars = (ArrayList<CarData>) is.readObject(); is.close(); } catch (Exception e) { Log.e(TAG, "ERROR Loading cars from file: " + storedFile, e); initDemoCar(); } return mStoredCars; } public void saveStoredCars() { if (mStoredCars == null) return; Log.d(TAG, "Saving cars to interal storage..."); try { FileOutputStream fos = mContext.openFileOutput(Consts.STOREDCARS_FILENAME, Context.MODE_PRIVATE); ObjectOutputStream os = new ObjectOutputStream(fos); os.writeObject(mStoredCars); os.close(); } catch (Exception e) { Log.e(TAG, "ERROR Save cars to file", e); } } public CarData getCarById(String pCarId) { if (mStoredCars == null) getStoredCars(); for (CarData car: mStoredCars) { if (car.sel_vehicleid.equals(pCarId)) return car; } return null; } public void initDemoCar() { Log.v(TAG, "Initializing demo car."); CarData demoCar = new CarData(); demoCar.sel_vehicleid = "DEMO"; demoCar.sel_vehicle_label = "Demonstration Car"; demoCar.sel_server_password = "DEMO"; demoCar.sel_module_password = "DEMO"; demoCar.sel_vehicle_image = "car_roadster_lightninggreen"; mStoredCars = new ArrayList<CarData>(); mStoredCars.add(demoCar); saveStoredCars(); } public String getLastSelectedCarId() { if (!TextUtils.isEmpty(mLastSelectedCarId)) return mLastSelectedCarId; mLastSelectedCarId = getPrefs().getString("LASTSELECTEDCARID", null); return mLastSelectedCarId; } public CarData getSelectedCarData() { CarData result = getCarById(getLastSelectedCarId()); if (result == null && mStoredCars.size() > 0) { result = mStoredCars.get(0); } return result; } public void setSelectedCarId(String pCarId) { mLastSelectedCarId = pCarId; getPrefs().edit().putString("LASTSELECTEDCARID", mLastSelectedCarId).commit(); } public SharedPreferences getPrefs() { if (mPreferences == null) { mPreferences = PreferenceManager.getDefaultSharedPreferences(mContext); } return mPreferences; } }