package com.adafruit.bluefruit.le.connect.mqtt;
import android.content.Context;
import android.content.SharedPreferences;
import com.adafruit.bluefruit.le.connect.app.settings.MqttUartSettingsActivity;
public class MqttSettings {
// Log
private final static String TAG = MqttSettings.class.getSimpleName();
// Singleton
private static MqttSettings mInstance = null;
// Constants
public final static int kDefaultServerPort = 1883;
public final static String kDefaultServerAddress = "io.adafruit.com";
public final static String kDefaultPublishTopicTx = null;//"uart_tx";
public final static String kDefaultPublishTopicRx = null;//"uart_rx";
public final static String kDefaultSubscribeTopic = null;//"uart_input";
private final static String kPreferences = "MqttSettings_prefs";
private final static String kPreferences_serveraddress = "serveraddress";
private final static String kPreferences_serverport = "serverport";
private final static String kPreferences_publishtopic = "publishtopic";
private final static String kPreferences_publishqos = "publishqos";
private final static String kPreferences_publishenabled = "publishenabled";
private final static String kPreferences_subscribetopic = "subscribetopic";
private final static String kPreferences_subscribeqos = "subscribeqos";
private final static String kPreferences_subscribebehaviour = "subscribebehaviour";
private final static String kPreferences_subscribeenabled = "subscribeenabled";
private final static String kPreferences_connected = "connected";
private final static String kPreferences_username = "username";
private final static String kPreferences_password = "password";
private final static String kPreferences_cleansession = "cleansession";
private final static String kPreferences_sslconnection = "sslconnection";
public static final int kSubscribeBehaviour_LocalOnly = 0; // note: should have the same order than strings/mqtt_uart_subscribe_behaviour
public static final int kSubscribeBehaviour_Transmit = 1;
// Data
private Context mContext;
public static MqttSettings getInstance(Context context) {
if (mInstance == null) {
mInstance = new MqttSettings(context);
}
return mInstance;
}
public MqttSettings(Context context) {
mContext = context.getApplicationContext();
}
private SharedPreferences getSharedPreferences() {
return mContext.getSharedPreferences(kPreferences, Context.MODE_PRIVATE);
}
private SharedPreferences.Editor getSharedPreferencesEditor() {
return mContext.getSharedPreferences(kPreferences, Context.MODE_PRIVATE).edit();
}
public String getServerAddress() {
return getPrefsString(kPreferences_serveraddress, kDefaultServerAddress);
}
public void setServerAddress(String address) {
setPrefsString(kPreferences_serveraddress, address);
}
public int getServerPort() {
return getPrefsInt(kPreferences_serverport, kDefaultServerPort);
}
public void setServerPort(String port) {
int portInt = kDefaultServerPort;
try {
portInt = Integer.parseInt(port);
} catch (NumberFormatException e) {
}
setPrefsInt(kPreferences_serverport, portInt);
}
public boolean isConnected() {
return getPrefsBoolean(kPreferences_connected, false);
}
public void setConnectedEnabled(boolean enabled) {
setPrefsBoolean(kPreferences_connected, enabled);
}
public boolean isPublishEnabled() {
return getPrefsBoolean(kPreferences_publishenabled, true);
}
public void setPublishEnabled(boolean enabled) {
setPrefsBoolean(kPreferences_publishenabled, enabled);
}
public boolean isSubscribeEnabled() {
return getPrefsBoolean(kPreferences_subscribeenabled, true);
}
public void setSubscribeEnabled(boolean enabled) {
setPrefsBoolean(kPreferences_subscribeenabled, enabled);
}
public int getPublishQos(int index) {
return getPrefsInt(kPreferences_publishqos + index, MqttManager.MqqtQos_AtMostOnce);
}
public void setPublishQos(int index, int qos) {
setPrefsInt(kPreferences_publishqos + index, qos);
}
public int getSubscribeQos() {
return getPrefsInt(kPreferences_subscribeqos, MqttManager.MqqtQos_AtMostOnce);
}
public void setSubscribeQos(int qos) {
setPrefsInt(kPreferences_subscribeqos, qos);
}
public int getSubscribeBehaviour() {
return getPrefsInt(kPreferences_subscribebehaviour, kSubscribeBehaviour_LocalOnly);
}
public void setSubscribeBehaviour(int behaviour) {
setPrefsInt(kPreferences_subscribebehaviour, behaviour);
}
public String getPublishTopic(int index) {
return getPrefsString(kPreferences_publishtopic + index, index == 0 ? kDefaultPublishTopicTx : kDefaultPublishTopicRx);
}
public void setPublishTopic(int index, String topic) {
setPrefsString(kPreferences_publishtopic + index, topic);
}
public String getSubscribeTopic() {
return getPrefsString(kPreferences_subscribetopic, kDefaultSubscribeTopic);
}
public void setSubscribeTopic(String topic) {
setPrefsString(kPreferences_subscribetopic, topic);
}
public String getUsername() {
return getPrefsString(kPreferences_username, null);
}
public void setUsername(String username) {
setPrefsString(kPreferences_username, username);
}
public String getPassword() {
return getPrefsString(kPreferences_password, null);
}
public void setPassword(String password) {
setPrefsString(kPreferences_password, password);
}
public boolean isSslConnection() {
return getPrefsBoolean(kPreferences_sslconnection, false);
}
public void setSslConnection(boolean enabled) {
setPrefsBoolean(kPreferences_sslconnection, enabled);
}
public boolean isCleanSession() {
return getPrefsBoolean(kPreferences_cleansession, true);
}
public void setCleanSession(boolean enabled) {
setPrefsBoolean(kPreferences_cleansession, enabled);
}
// region Utils
private String getPrefsString(String key, String defaultValue) {
return getSharedPreferences().getString(key, defaultValue);
}
private int getPrefsInt(String key, int defaultValue) {
return getSharedPreferences().getInt(key, defaultValue);
}
private boolean getPrefsBoolean(String key, boolean defaultValue) {
return getSharedPreferences().getBoolean(key, defaultValue);
}
public void setPrefsString(String key, String value) {
SharedPreferences.Editor editor = getSharedPreferencesEditor();
editor.putString(key, value);
editor.apply();
}
public void setPrefsInt(String key, int value) {
SharedPreferences.Editor editor = getSharedPreferencesEditor();
editor.putInt(key, value);
editor.apply();
}
public void setPrefsBoolean(String key, boolean value) {
SharedPreferences.Editor editor = getSharedPreferencesEditor();
editor.putBoolean(key, value);
editor.apply();
}
// endregion
}