package org.adaptlab.chpir.android.survey.Models;
import android.text.TextUtils;
import android.util.Log;
import com.activeandroid.Model;
import com.activeandroid.annotation.Column;
import com.activeandroid.annotation.Table;
import com.activeandroid.query.Select;
@Table(name = "AdminSettings")
public class AdminSettings extends Model {
private static final String TAG = "AdminSettings";
@Column(name = "DeviceIdentifier")
private String mDeviceIdentifier;
@Column(name = "DeviceLabel")
private String mDeviceLabel;
@Column(name = "SyncInterval")
private int mSyncInterval;
@Column(name = "ApiUrl")
private String mApiUrl;
@Column(name = "CustomLocaleCode")
private String mCustomLocaleCode;
@Column(name = "ShowSurveys")
private boolean mShowSurveys;
@Column(name = "ShowSkip")
private boolean mShowSkip;
@Column(name = "ShowNA")
private boolean mShowNA;
@Column(name = "ShowRF")
private boolean mShowRF;
@Column(name = "ShowDK")
private boolean mShowDK;
@Column(name = "ApiVersion")
private String mApiVersion;
@Column(name = "ProjectId")
private String mProjectId;
@Column(name = "ApiKey")
private String mApiKey;
@Column(name = "RequirePassword")
private boolean mRequirePassword;
@Column(name= "RecordSurveyLocation")
private boolean mRecordSurveyLocation;
private static AdminSettings adminSettings;
/**
* This maintains a single row in the database for the admin settings, and
* effectively is a Singleton. This is done to piggy-back on the
* ReceiveModel functionality.
*
*/
public static AdminSettings getInstance() {
adminSettings = new Select().from(AdminSettings.class).orderBy("Id asc").executeSingle();
if (adminSettings == null) {
Log.i(TAG, "Creating new admin settings instance");
adminSettings = new AdminSettings();
adminSettings.save();
}
return adminSettings;
}
/**
* Typically a Singleton constructor is private, but in this case the constructor
* must be public for ActiveAndroid to function properly. Do not use this
* constructor, use getInstance() instead.
*
*/
public AdminSettings() {
super();
mShowSurveys = false;
}
public void setDeviceIdentifier(String id) {
mDeviceIdentifier = id;
save();
}
public String getDeviceIdentifier() {
return mDeviceIdentifier;
}
public void setDeviceLabel(String label) {
mDeviceLabel = label;
save();
}
public String getDeviceLabel() {
return mDeviceLabel;
}
/**
* Millisecond sync interval
*/
public int getSyncInterval() {
return mSyncInterval;
}
/**
* Second sync interval
*/
public int getSyncIntervalInMinutes() {
return mSyncInterval / (60 * 1000);
}
/**
* Set the interval in minutes, it is converted to milliseconds
*/
public void setSyncInterval(int interval) {
Log.i(TAG, "Setting set interval: " + (interval * 1000 * 60));
mSyncInterval = interval * 1000 * 60;
save();
}
public void setApiDomainName(String apiUrl) {
if (!TextUtils.isEmpty(apiUrl)) {
char lastChar = apiUrl.charAt(apiUrl.length() - 1);
if (lastChar != '/') apiUrl = apiUrl + "/";
mApiUrl = apiUrl;
save();
}
}
public String getApiDomainName() {
return mApiUrl;
}
public void setCustomLocaleCode(String code) {
mCustomLocaleCode = code;
save();
}
public String getCustomLocaleCode() {
return mCustomLocaleCode;
}
public void setShowSurveys(boolean showSurveys) {
mShowSurveys = showSurveys;
save();
}
public boolean getShowSurveys() {
return mShowSurveys;
}
public void setShowSkip(boolean showSkip) {
mShowSkip = showSkip;
save();
}
/*
* Show SKIP special response for each question if true
*/
public boolean getShowSkip() {
return mShowSkip;
}
public void setShowNA(boolean showNA) {
mShowNA = showNA;
save();
}
/*
* Show NOT APPLICABLE special response for each question if true
*/
public boolean getShowNA() {
return mShowNA;
}
public void setShowRF(boolean showRF) {
mShowRF = showRF;
save();
}
/*
* Show REFUSED special response for each question if true
*/
public boolean getShowRF() {
return mShowRF;
}
public void setShowDK(boolean showDK) {
mShowDK = showDK;
save();
}
/*
* Show DONT KNOW special response for each question if true
*/
public boolean getShowDK() {
return mShowDK;
}
public void setApiVersion(String apiVersion) {
mApiVersion = apiVersion;
save();
}
public String getApiVersion() {
return mApiVersion;
}
public void setProjectId(String projectId) {
mProjectId = projectId;
save();
}
public String getProjectId() {
return mProjectId;
}
public void setApiKey(String apiKey) {
mApiKey = apiKey;
save();
}
public String getApiKey() {
return mApiKey;
}
public boolean getRequirePassword() {
return mRequirePassword;
}
public void setRequirePassword(boolean requirePassword) {
mRequirePassword = requirePassword;
save();
}
public void setRecordSurveyLocation(boolean recordSurveyLocation) {
mRecordSurveyLocation = recordSurveyLocation;
save();
}
public boolean getRecordSurveyLocation() {
return mRecordSurveyLocation;
}
public String getApiUrl() {
return getApiDomainName() + "api/" + getApiVersion() + "/" + "projects/" + getProjectId() + "/";
}
}