package org.starfishrespect.myconsumption.android; import android.app.Activity; import android.content.Context; import android.content.Intent; import org.starfishrespect.myconsumption.android.controllers.StatsController; import org.starfishrespect.myconsumption.android.controllers.UserController; import org.starfishrespect.myconsumption.android.dao.DatabaseHelper; import org.starfishrespect.myconsumption.android.dao.SensorValuesDao; import org.starfishrespect.myconsumption.android.data.KeyValueData; import org.starfishrespect.myconsumption.android.data.SensorData; import org.starfishrespect.myconsumption.android.ui.LoginActivity; import java.sql.SQLException; import java.util.Random; /** * Class used to store unique objects accessible everywhere in the app * S23Y (2015). Licensed under the Apache License, Version 2.0. * Author: Thibaud Ledent */ public class SingleInstance { private static DatabaseHelper databaseHelper; private static UserController userController; private static int spinnerSensorPosition = 0; protected static Context context; private static StatsController statsController; private static boolean init = true; private static int[] colors = {0xffff0000, 0xff0000ff, 0xff000000, 0xff000060, 0xff008000, 0xff600000, 0xff661144, 0xff606060, 0xffaa6611}; public static void init(Context c) { if (init) context = c; init = false; // Init database helper getDatabaseHelper(); // Load the user getUserController().loadUser(); } // removes all the data of the current user and go back to the login public static void disconnect() { KeyValueData userKey = getDatabaseHelper().getValueForKey("user"); try { if (userKey != null) { getDatabaseHelper().getKeyValueDao().delete(userKey); } SensorValuesDao sensorValuesDao = new SensorValuesDao(getDatabaseHelper()); for (SensorData s : getDatabaseHelper().getSensorDao().queryForAll()) { sensorValuesDao.removeSensor(s.getSensorId()); } getDatabaseHelper().clearTable("sensors"); } catch (SQLException e) { e.printStackTrace(); } context.startActivity(new Intent(context, LoginActivity.class)); ((Activity) context).finish(); } public static DatabaseHelper getDatabaseHelper() { if (databaseHelper == null) databaseHelper = new DatabaseHelper(context); return databaseHelper; } public static UserController getUserController() { if (userController == null) userController = new UserController(); return userController; } public static StatsController getStatsController() { if (statsController == null) statsController = new StatsController(); return statsController; } public static String getServerUrl() { return Config.protocol + Config.serverAddress + ":" + Config.port + "/" + Config.serverDir; } public static void destroyDatabaseHelper() { databaseHelper = null; } public static int getRandomColor() { return colors[new Random().nextInt(colors.length)]; } public static double getkWhToCO2() { KeyValueData valueData = getDatabaseHelper().getValueForKey("config_co2"); if (valueData == null) return 0.0; else return Double.parseDouble(valueData.getValue()); } public static double getkWhDayPrice() { KeyValueData valueData = getDatabaseHelper().getValueForKey("config_day"); if (valueData == null) return 0.0; else return Double.parseDouble(valueData.getValue()); } public static double getkWhNightPrice() { KeyValueData valueData = getDatabaseHelper().getValueForKey("config_night"); if (valueData == null) return 0.0; else return Double.parseDouble(valueData.getValue()); } public static int getSpinnerSensorPosition() { return spinnerSensorPosition; } public static void setSpinnerSensorPosition(int spinnerSensorPosition) { SingleInstance.spinnerSensorPosition = spinnerSensorPosition; } }