/*******************************************************************************
* Created by Carlos Yaconi
* Copyright 2015 Prey Inc. All rights reserved.
* License: GPLv3
* Full license at "/LICENSE"
******************************************************************************/
package com.prey;
import android.*;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Build;
import android.preference.PreferenceManager;
import android.support.v4.content.PermissionChecker;
import android.telephony.TelephonyManager;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.location.LocationRequest;
import com.prey.activities.FeedbackActivity;
import com.prey.managers.PreyConnectivityManager;
import com.prey.net.PreyWebServices;
import com.prey.services.PreyDisablePowerOptionsService;
import com.prey.services.PreyRegistrationIntentService;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
public class PreyConfig {
//Set false in production
public static final boolean LOG_DEBUG_ENABLED = false;
private static PreyConfig cachedInstance = null;
public static final String TAG = "PREY";
private static final String HTTP="https://";
// Milliseconds per second
private static final int MILLISECONDS_PER_SECOND = 1000;
// Set to 1000 * 60 in production.
public static final long DELAY_MULTIPLIER = 60 * 1000;
// the minimum time interval for GPS notifications, in milliseconds (default 60000).
public static final long UPDATE_INTERVAL = 60 * MILLISECONDS_PER_SECOND;
// the minimum distance interval for GPS notifications, in meters (default 20)
public static final float LOCATION_PROVIDERS_MIN_REFRESH_DISTANCE = 20;
// max "age" in ms of last location (default 120000).
public static final long LAST_LOCATION_MAX_AGE = 30 * MILLISECONDS_PER_SECOND;
public static final int LOCATION_PRIORITY_HIGHT = LocationRequest.PRIORITY_HIGH_ACCURACY;
public static final long FASTEST_INTERVAL = 40 * MILLISECONDS_PER_SECOND;
public static final long UPDATE_INTERVAL_IN_MILLISECONDS = 10 * MILLISECONDS_PER_SECOND;
public static final long FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS = UPDATE_INTERVAL_IN_MILLISECONDS / 2;
public static final String PROTECT_ACCOUNT="PROTECT_ACCOUNT";
public static final String PROTECT_PRIVILEGES="PROTECT_PRIVILEGES";
public static final String PROTECT_TOUR="PROTECT_TOUR";
public static final String PROTECT_READY="PROTECT_READY";
public static final String PREFS_SIM_SERIAL_NUMBER = "PREFS_SIM_SERIAL_NUMBER";
public static final String PREFS_SECURITY_PROMPT_SHOWN = "PREFS_SECURITY_PROMPT_SHOWN";
public static final String PREFS_IS_MISSING="PREFS_IS_MISSING";
public static final String PREFS_DISABLE_POWER_OPTIONS="PREFS_DISABLE_POWER_OPTIONS";
public static final String IS_LOCK_SET="IS_LOCK_SET";
public static final String NEXT_ALERT="NEXT_ALERT";
public static final String IS_CAMOUFLAGE_SET="IS_CAMOUFLAGE_SET";
public static final String PREFS_RINGTONE="PREFS_RINGTONE";
public static final String LAST_EVENT="LAST_EVENT";
public static final String LOW_BATTERY_DATE="LOW_BATTERY_DATE";
public static final String PREVIOUS_SSID="PREVIOUS_SSID";
public static final String FLAG_FEEDBACK="FLAG_FEEDBACK";
public static final String INSTALLATION_DATE="INSTALLATION_DATE";
public static final String PREFS_ACCOUNT_VERIFIED="PREFS_ACCOUNT_VERIFIED";
public static final String EMAIL="EMAIL";
public static final String PREFS_SCHEDULED="PREFS_SCHEDULED";
public static final String SEND_DATA="SEND_DATA";
public static final String SCHEDULED="SCHEDULED";
public static final String MINUTE_SCHEDULED="MINUTE_SCHEDULED";
public static final String IS_REVOKED_PASSWORD="IS_REVOKED_PASSWORD";
public static final String REVOKED_PASSWORD="REVOKED_PASSWORD";
public static final String NOTIFICATION_ID="NOTIFICATION_ID";
public static final String INTERVAL_REPORT="INTERVAL_REPORT";
public static final String EXCLUDE_REPORT="EXCLUDE_REPORT";
public static final String LAST_REPORT_START_DATE="LAST_REPORT_START_DATE";
public static final String TIMEOUT_REPORT="TIMEOUT_REPORT";
public static final String LOCATION_LOW_BATTERY_DATE="LOCATION_LOW_BATTERY_DATE";
public static final String SESSION_ID="SESSION_ID";
public static final String PIN_NUMBER="PIN_NUMBER";
public static final String SMS_COMMAND="SMS_COMMAND";
public static final String PREFERENCE_LOCATION_LOW_BATTERY="PREFERENCE_LOCATION_LOW_BATTERY";
public static final String TOKEN_JWT="TOKEN_JWT";
public static final int ANDROID_INIT = 2000;
public static final int ANDROID_SIGN_UP = 2001;
public static final int ANDROID_TOUR_SCREEN = 2002;
public static final int ANDROID_TOUR_COMPLETED = 2003;
public static final int ANDROID_PRIVILEGES_GIVEN = 2004;
public static final int ANDROID_SIGN_IN = 2005;
public static final int ANDROID_LOGIN_SETTINGS = 2007;
public static final int ANDROID_FAILED_LOGIN_SETTINGS = 2008;
public static final int ANDROID_VERSION_UPDATED = 2009;
public static final int ANDROID_ONBOARDING_INIT = 2010;
public static final int ANDROID_ONBOARDING_COMPLETED = 2011;
public static final String PREFERENCE_PREY_VERSION="PREFERENCE_PREY_VERSION";
public static final String API_KEY="API_KEY";
public static final String DEVICE_ID = "DEVICE_ID";
public static final String SIM_SERIAL_NUMBER = "SIM_SERIAL_NUMBER";
public static final String VERSION_PREY_DEFAULT="1.7.2";
public static final String CAN_ACCESS_FINE_LOCATION = "CAN_ACCESS_FINE_LOCATION";
public static final String CAN_ACCESS_COARSE_LOCATION = "CAN_ACCESS_COARSE_LOCATION";
public static final String CAN_ACCESS_CAMARA = "CAN_ACCESS_CAMARA";
public static final String CAN_ACCESS_READ_PHONE_STATE = "CAN_ACCESS_READ_PHONE_STATE";
public static final String CAN_ACCESS_EXTERNAL_STORAGE= "CAN_ACCESS_EXTERNAL_STORAGE";
public static final String TIME_PASSWORD_OK = "TIME_PASSWORD_OK";
public static final int NOTIFY_ANDROID_6 = 6;
public static final String SENT_UUID_SERIAL_NUMBER = "SENT_UUID_SERIAL_NUMBER";
public static final String LAST_EVENT_GEO = "LAST_EVENT_GEO";
public static final String MESSAGE_ID="messageID";
public static final String UNLOCK_PASS="unlock_pass";
public static final String NOTIFICATION_ANDROID_7="notify_android_7";
private boolean securityPrivilegesAlreadyPrompted;
private Context ctx;
public static String postUrl = null;
private long installationDate;
private boolean run;
private boolean registerC2dm=false;
private boolean scheduled;
private int minuteScheduled;
private int timeoutReport;
private boolean runOnce;
private boolean disablePowerOptions;
private PreyConfig(Context ctx) {
this.ctx = ctx;
this.scheduled=getBoolean(PreyConfig.SCHEDULED, FileConfigReader.getInstance(ctx).isScheduled());
this.minuteScheduled=getInt(PreyConfig.MINUTE_SCHEDULED, FileConfigReader.getInstance(ctx).getMinuteScheduled());
this.timeoutReport=getInt(PreyConfig.TIMEOUT_REPORT, FileConfigReader.getInstance(ctx).getTimeoutReport());
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(ctx);
this.disablePowerOptions = settings.getBoolean(PreyConfig.PREFS_DISABLE_POWER_OPTIONS, false);
}
public static synchronized PreyConfig getPreyConfig(Context ctx) {
if (cachedInstance==null){
synchronized(PreyConfig.class) {
if (cachedInstance == null)
cachedInstance = new PreyConfig(ctx);
}
}
return cachedInstance;
}
private static void deleteCacheInstance() {
cachedInstance = null;
}
public Context getContext(){
return ctx;
}
private void saveString(String key, String value){
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(ctx);
SharedPreferences.Editor editor = settings.edit();
editor.putString(key, value);
editor.commit();
}
private String getString(String key,String defaultValue){
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(ctx);
return settings.getString(key, defaultValue);
}
private void saveInt(String key, int value){
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(ctx);
SharedPreferences.Editor editor = settings.edit();
editor.putInt(key, value);
editor.commit();
}
private int getInt(String key,int defaultValue){
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(ctx);
return settings.getInt(key, defaultValue);
}
private void saveBoolean(String key, boolean value){
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(ctx);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean(key, value);
editor.commit();
}
private boolean getBoolean(String key,boolean defaultValue){
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(ctx);
return settings.getBoolean(key, defaultValue);
}
private void saveLong(String key, long value){
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(ctx);
SharedPreferences.Editor editor = settings.edit();
editor.putLong(key, value);
editor.commit();
}
private void removeKey(String key){
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(ctx);
SharedPreferences.Editor editor = settings.edit();
editor.remove(key);
editor.commit();
}
private long getLong(String key, long defaultValue){
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(ctx);
return settings.getLong(key, defaultValue);
}
public void setProtectAccount(boolean protectAccount) {
this.saveBoolean(PreyConfig.PROTECT_ACCOUNT, protectAccount);
}
public boolean getProtectAccount() {
return getBoolean(PreyConfig.PROTECT_ACCOUNT, false);
}
public void setProtectPrivileges(boolean protectPrivileges) {
this.saveBoolean(PreyConfig.PROTECT_PRIVILEGES, protectPrivileges);
}
public boolean getProtectPrivileges() {
return getBoolean(PreyConfig.PROTECT_PRIVILEGES, false);
}
public void setProtectTour(boolean protectTour) {
this.saveBoolean(PreyConfig.PROTECT_TOUR, protectTour);
}
public boolean getProtectReady() {
return getBoolean(PreyConfig.PROTECT_READY, false);
}
public void setProtectReady(boolean protectReady) {
this.saveBoolean(PreyConfig.PROTECT_READY, protectReady);
}
public boolean getProtectTour() {
return getBoolean(PreyConfig.PROTECT_TOUR, false);
}
public void setCanAccessFineLocation(boolean canAccessFineLocation) {
this.saveBoolean(PreyConfig.CAN_ACCESS_FINE_LOCATION, canAccessFineLocation);
}
public boolean canAccessFineLocation() {
return getBoolean(PreyConfig.CAN_ACCESS_FINE_LOCATION, false);
}
public void setCanAccessCoarseLocation(boolean canAccessCoarseLocation) {
this.saveBoolean(PreyConfig.CAN_ACCESS_COARSE_LOCATION, canAccessCoarseLocation);
}
public boolean canAccessCoarseLocation() {
return getBoolean(PreyConfig.CAN_ACCESS_COARSE_LOCATION, false);
}
public void setCanAccessCamara(boolean canAccessCamara) {
this.saveBoolean(PreyConfig.CAN_ACCESS_CAMARA, canAccessCamara);
}
public boolean canAccessCamara() {
return getBoolean(PreyConfig.CAN_ACCESS_CAMARA, false);
}
public void setCanAccessReadPhoneState(boolean canAccessReadPhoneState) {
this.saveBoolean(PreyConfig.CAN_ACCESS_READ_PHONE_STATE, canAccessReadPhoneState);
}
public boolean canAccessReadPhoneState() {
return getBoolean(PreyConfig.CAN_ACCESS_READ_PHONE_STATE, false);
}
public void setCanAccessExternalStorage(boolean canAccessExternalStorage) {
this.saveBoolean(PreyConfig.CAN_ACCESS_EXTERNAL_STORAGE, canAccessExternalStorage);
}
public boolean canAccessExternalStorage() {
return getBoolean(PreyConfig.CAN_ACCESS_EXTERNAL_STORAGE, false);
}
public String getApiKey(){
return getString(PreyConfig.API_KEY, null);
}
public void setApiKey(String apikey){
this.saveString(PreyConfig.API_KEY, apikey);
}
public String getDeviceId(){
return getString(PreyConfig.DEVICE_ID, null);
}
public void setDeviceId(String deviceId){
this.saveString(PreyConfig.DEVICE_ID, deviceId);
}
public String getUnlockPass(){
return getString(PreyConfig.UNLOCK_PASS, null);
}
public void setUnlockPass(String unlockPass){
this.saveString(PreyConfig.UNLOCK_PASS, unlockPass);
}
public void deleteUnlockPass(){
this.removeKey(PreyConfig.UNLOCK_PASS);
}
public String getNotificationAndroid7(){
return getString(PreyConfig.NOTIFICATION_ANDROID_7, null);
}
public void setNotificationAndroid7(String notificationAndroid7){
this.saveString(PreyConfig.NOTIFICATION_ANDROID_7, notificationAndroid7);
}
public void setSecurityPrivilegesAlreadyPrompted(boolean securityPrivilegesAlreadyPrompted) {
this.securityPrivilegesAlreadyPrompted = securityPrivilegesAlreadyPrompted;
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(ctx);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean(PreyConfig.PREFS_SECURITY_PROMPT_SHOWN, securityPrivilegesAlreadyPrompted);
editor.commit();
}
public String getPreyVersion() {
String versionName=VERSION_PREY_DEFAULT;
try{
PackageInfo pinfo =ctx.getPackageManager().getPackageInfo(ctx.getPackageName(), 0);
versionName = pinfo.versionName;
}catch(Exception e){
}
return versionName;
}
public boolean isFroyoOrAbove() {
return android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO;
}
public boolean isGingerbreadOrAbove() {
return android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD;
}
public boolean isIceCreamSandwichOrAbove() {
return android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1;
}
public boolean isEclairOrAbove(){
return android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR;
}
public boolean isCupcakeOrAbove() {
return android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE;
}
public boolean isMarshmallowOrAbove() {
return android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
}
public boolean isNougatOrAbove() {
return android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N;
}
public String getLastEvent() {
return getString(PreyConfig.LAST_EVENT, null);
}
public void setLastEvent(String lastEvent) {
saveString(PreyConfig.LAST_EVENT, lastEvent);
}
public long getLowBatteryDate() {
return getLong(PreyConfig.LOW_BATTERY_DATE, 0);
}
public void setLowBatteryDate(long lowBatteryDate) {
saveLong(PreyConfig.LOW_BATTERY_DATE, lowBatteryDate);
}
public String getPreviousSsid() {
return getString(PreyConfig.PREVIOUS_SSID, null);
}
public void setPreviousSsid(String previousSsid) {
this.saveString(PreyConfig.PREVIOUS_SSID, previousSsid);
}
public boolean isThisDeviceAlreadyRegisteredWithPrey(boolean notifyUser) {
String deviceId = getString(PreyConfig.DEVICE_ID, null);
boolean isVerified = (deviceId != null && !"".equals(deviceId));
return isVerified;
}
public boolean isThisDeviceAlreadyRegisteredWithPrey() {
String deviceID=getDeviceId();
return deviceID!=null&&!"".equals(deviceID);
}
public boolean isSimChanged() {
String simSerial=new PreyPhone(ctx).getSimSerialNumber();
PreyLogger.i("simSerial:" + simSerial + " actual:" + getSimSerialNumber());
if (getSimSerialNumber()==null||"".equals(getSimSerialNumber())){
if(simSerial!=null&&!"".equals(simSerial)){
this.setSimSerialNumber(simSerial);
}
return false;
}
if(simSerial!=null&&!"".equals(simSerial)&&!simSerial.equals(this.getSimSerialNumber())){
return true;
}
return false;
}
public String getSimSerialNumber(){
return getString(PreyConfig.SIM_SERIAL_NUMBER,null);
}
public void setSimSerialNumber(String simSerialNumber) {
saveString(PreyConfig.SIM_SERIAL_NUMBER,simSerialNumber);
}
public boolean isConnectionExists() {
boolean isConnectionExists = false;
// There is wifi connexion?
if (PreyConnectivityManager.getInstance(ctx).isWifiConnected()) {
isConnectionExists = true;
}
// if there is no connexion wifi, verify mobile connection?
if (!isConnectionExists && PreyConnectivityManager.getInstance(ctx).isMobileConnected()) {
isConnectionExists = true;
}
return isConnectionExists;
}
public boolean isRun() {
return run;
}
public void setRun(boolean run) {
this.run = run;
}
public void registerC2dm(){
boolean error=false;
String deviceId = PreyConfig.getPreyConfig(ctx).getDeviceId();
PreyLogger.d("deviceId:"+deviceId);
if (deviceId != null && !"".equals(deviceId)) {
try {
PreyLogger.d("______________________");
PreyLogger.d("___ registerC2dm _____");
Intent registrationIntent = new Intent("com.google.android.c2dm.intent.REGISTER");
registrationIntent.putExtra("app", PendingIntent.getBroadcast(this.ctx, 0, new Intent(), 0)); // boilerplate
String gcmId = FileConfigReader.getInstance(this.ctx).getGcmId();
registrationIntent.putExtra("sender", gcmId);
this.ctx.startService(registrationIntent);
PreyLogger.d("______________________");
} catch (Exception e) {
error = true;
}
if (error) {
try {
PreyLogger.d("______________________");
PreyLogger.d("___ registerC2dm 2_____");
PreyLogger.d("starservice RegistrationIntentService");
Intent intent = new Intent(ctx, PreyRegistrationIntentService.class);
ctx.startService(intent);
PreyLogger.d("______________________");
} catch (Exception e) {
PreyLogger.e("Error :" + e.getMessage(), e);
}
}
}
}
private static final int PLAY_SERVICES_RESOLUTION_REQUEST = 9000;
/**
* Check the device to make sure it has the Google Play Services APK. If
* it doesn't, display a dialog that allows users to download the APK from
* the Google Play Store or enable it in the device's system settings.
*/
private boolean checkPlayServices() {
int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(ctx);
if (resultCode != ConnectionResult.SUCCESS) {
return false;
}
return true;
}
public void unregisterC2dm(boolean updatePrey){
try {
if (updatePrey)
PreyWebServices.getInstance().setPushRegistrationId(ctx, "");
Intent unregIntent = new Intent("com.google.android.c2dm.intent.UNREGISTER");
unregIntent.putExtra("app", PendingIntent.getBroadcast(this.ctx, 0, new Intent(), 0));
this.ctx.startService(unregIntent);
}catch(Exception e){
}
}
public boolean isDisablePowerOptions(){
return getDisablePowerOptions();
}
public boolean getDisablePowerOptions() {
return getBoolean(PreyConfig.PREFS_DISABLE_POWER_OPTIONS, false);
}
public void setDisablePowerOptions(boolean disablePowerOptions) {
saveBoolean(PreyConfig.PREFS_DISABLE_POWER_OPTIONS, disablePowerOptions);
}
public void setLock(boolean locked) {
saveBoolean(PreyConfig.IS_LOCK_SET, locked);
}
public boolean isLockSet() {
return getBoolean(PreyConfig.IS_LOCK_SET, false);
}
public void setNextAlert(boolean nextAlert){
saveBoolean(PreyConfig.NEXT_ALERT, nextAlert);
}
public boolean isNextAlert() {
return getBoolean(PreyConfig.NEXT_ALERT, false);
}
public void setCamouflageSet(boolean camouflageSet){
this.saveBoolean(PreyConfig.IS_CAMOUFLAGE_SET, camouflageSet);
}
public boolean isCamouflageSet() {
return getBoolean(PreyConfig.IS_CAMOUFLAGE_SET, false);
}
public String getPreyPanelUrl() {
String panel = FileConfigReader.getInstance(this.ctx).getPreyPanel();
String url= HTTP.concat(panel).concat(".").concat(getPreyDomain()).concat("/").concat(getPreyCampaign());
PreyLogger.i(url);
return url;
}
public String getPreyPanelJwt() {
String panel = FileConfigReader.getInstance(this.ctx).getPreyPanel();
String url= HTTP.concat(panel).concat(".").concat(getPreyDomain()).concat("/").concat(getPreyJwt());
PreyLogger.i(url);
return url;
}
public String getPreyUrl() {
String subdomain = FileConfigReader.getInstance(this.ctx).getPreySubdomain();
return HTTP.concat(subdomain).concat(".").concat(getPreyDomain()).concat("/");
}
public String getPreyDomain() {
return FileConfigReader.getInstance(this.ctx).getPreyDomain();
}
public String getPreyCampaign() {
return FileConfigReader.getInstance(this.ctx).getPreyCampaign();
}
public String getPreyJwt() {
return FileConfigReader.getInstance(this.ctx).getPreyJwt();
}
public String getPreyGooglePlay() {
return FileConfigReader.getInstance(this.ctx).getPreyGooglePlay();
}
public String getPreyUninstallUrl() {
String url = FileConfigReader.getInstance(this.ctx).getPreyUninstall();
PreyLogger.i(url);
return url;
}
public String getApiKeyBatch() {
return FileConfigReader.getInstance(this.ctx).getApiKeyBatch();
}
public String getEmailBatch() {
return FileConfigReader.getInstance(this.ctx).getEmailBatch();
}
public int getFlagFeedback() {
return getInt(PreyConfig.FLAG_FEEDBACK, 0);
}
public void setFlagFeedback(int flagFeedback) {
saveInt(PreyConfig.FLAG_FEEDBACK, flagFeedback);
}
public boolean showFeedback() {
return FeedbackActivity.showFeedback(getLong(PreyConfig.INSTALLATION_DATE, 0), getFlagFeedback());
}
public void setAccountVerified(boolean accountVerified) {
saveBoolean(PreyConfig.PREFS_ACCOUNT_VERIFIED, accountVerified);
}
public boolean isAccountVerified() {
return getBoolean(PreyConfig.PREFS_ACCOUNT_VERIFIED, false);
}
public String getEmail() {
return getString(PreyConfig.EMAIL, "");
}
public void setEmail(String email) {
saveString(PreyConfig.EMAIL, email);
}
public void setAccountVerified() {
saveBoolean(PreyConfig.PREFS_ACCOUNT_VERIFIED, true);
}
public boolean isSendData(){
return getBoolean(PreyConfig.SEND_DATA, false);
}
public void setSendData(boolean sendData) {
saveBoolean(PreyConfig.SEND_DATA, sendData);
}
public void saveAccount(PreyAccountData accountData) {
this.saveSimInformation();
saveString(PreyConfig.DEVICE_ID, accountData.getDeviceId());
saveString(PreyConfig.API_KEY, accountData.getApiKey());
saveString(PreyConfig.EMAIL, accountData.getEmail());
}
public void saveSimInformation() {
String simSerial=new PreyPhone(ctx).getSimSerialNumber();
if (simSerial !=null){
this.setSimSerialNumber(simSerial);
}
this.saveString(PreyConfig.PREFS_SIM_SERIAL_NUMBER, this.getSimSerialNumber());
PreyLogger.d("SIM Serial number stored: " + this.getSimSerialNumber());
}
public boolean isMissing() {
return getBoolean(PreyConfig.PREFS_IS_MISSING, false);
}
public void setMissing(boolean missing) {
saveBoolean(PreyConfig.PREFS_IS_MISSING, missing);
}
public boolean isRunOnce() {
return runOnce;
}
public void setRunOnce(boolean runOnce) {
this.runOnce = runOnce;
}
public void wipeData() {
long installationDate=getLong(PreyConfig.INSTALLATION_DATE, 0);
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(ctx);
SharedPreferences.Editor editor = settings.edit();
editor.clear();
editor.commit();
if(installationDate>0) {
saveLong(PreyConfig.INSTALLATION_DATE, installationDate);
}
}
public void setRevokedPassword(boolean isRevokedPassword, String revokedPassword) {
saveBoolean(PreyConfig.IS_REVOKED_PASSWORD, isRevokedPassword);
saveString(PreyConfig.REVOKED_PASSWORD, revokedPassword);
}
public void setNotificationId(String notificationId) {
saveString(PreyConfig.NOTIFICATION_ID, notificationId);
}
public String getNotificationId(){
return getString(PreyConfig.NOTIFICATION_ID, "");
}
public void setRegisterC2dm(boolean registerC2dm){
this.registerC2dm=registerC2dm;
}
public boolean isRegisterC2dm(){
return registerC2dm;
}
public String getIntervalReport(){
return getString(PreyConfig.INTERVAL_REPORT,"");
}
public void setIntervalReport(String intervalReport) {
this.saveString(PreyConfig.INTERVAL_REPORT, intervalReport);
}
public String getExcludeReport(){
return getString(PreyConfig.EXCLUDE_REPORT,"");
}
public void setExcludeReport(String excludeReport) {
saveString(PreyConfig.EXCLUDE_REPORT, excludeReport);
}
public void setLastReportStartDate(long lastReportStartDate){
saveLong(PreyConfig.LAST_REPORT_START_DATE, lastReportStartDate);
}
public long getLastReportStartDate(){
return getLong(PreyConfig.LAST_REPORT_START_DATE, 0);
}
public void setInstallationDate(long installationDate){
saveLong(PreyConfig.INSTALLATION_DATE, installationDate);
}
public long getInstallationDate(){
return getLong(PreyConfig.INSTALLATION_DATE, 0);
}
public void setLocationLowBatteryDate(long locationLowBatteryDate){
saveLong(PreyConfig.LOCATION_LOW_BATTERY_DATE, locationLowBatteryDate);
}
public long getLocationLowBatteryDate(){
return getLong(PreyConfig.LOCATION_LOW_BATTERY_DATE, 0);
}
public void setScheduled(boolean scheduled){
this.scheduled=scheduled;
saveBoolean(PreyConfig.SCHEDULED, scheduled);
}
public boolean isScheduled(){
try{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR) {
if (PreyEmail.getEmail(ctx)!=null)
return false;
}
}catch(Exception e){
return false;
}
return scheduled;
}
public void setMinuteScheduled(int minuteScheduled){
this.minuteScheduled=minuteScheduled;
saveInt(PreyConfig.MINUTE_SCHEDULED, minuteScheduled);
}
public int getMinuteScheduled(){
return minuteScheduled;
}
public int getTimeoutReport(){
return timeoutReport;
}
public String getSessionId(){
return getString(PreyConfig.SESSION_ID, "");
}
public void setSessionId(String sessionId) {
saveString(PreyConfig.SESSION_ID, sessionId);
}
public void setPinNumber(int pin){
saveInt(PreyConfig.PIN_NUMBER, pin);
}
public int getPinNumber() {
return getInt(PreyConfig.PIN_NUMBER, -1);
}
public void setSmsCommand(boolean smsCommand) {
saveBoolean(PreyConfig.SMS_COMMAND, smsCommand);
}
public boolean isSmsCommand(){
return getBoolean(PreyConfig.SMS_COMMAND, false);
}
public String getPreferencePreyVersion(){
return getString(PreyConfig.PREFERENCE_PREY_VERSION, "");
}
public void setPreferencePreyVersion(String preferencePreyVersion) {
saveString(PreyConfig.PREFERENCE_PREY_VERSION, preferencePreyVersion);
}
public void setLocationLowBattery(boolean locationLowBattery) {
saveBoolean(PreyConfig.PREFERENCE_LOCATION_LOW_BATTERY, locationLowBattery);
}
public boolean isLocationLowBattery() {
return getBoolean(PreyConfig.PREFERENCE_LOCATION_LOW_BATTERY, false);
}
public int getGeofenceMaximumAccuracy(){
return FileConfigReader.getInstance(this.ctx).getGeofenceMaximumAccuracy();
}
public int getDistanceLocation(){
return FileConfigReader.getInstance(this.ctx).getDistanceLocation();
}
public boolean isSentUuidSerialNumber() {
return getBoolean(PreyConfig.SENT_UUID_SERIAL_NUMBER, false);
}
public void setSentUuidSerialNumber(boolean sentUuidSerialNumber){
saveBoolean(PreyConfig.SENT_UUID_SERIAL_NUMBER, sentUuidSerialNumber);
}
public String getTokenJwt(){
return getString(PreyConfig.TOKEN_JWT, "");
}
public void setTokenJwt(String tokenJwt) {
saveString(PreyConfig.TOKEN_JWT, tokenJwt);
}
public void setTimePasswordOk(){
Calendar cal= Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.HOUR,1);
saveLong(TIME_PASSWORD_OK,cal.getTimeInMillis());
}
public boolean isTimePasswordOk(){
long timePasswordOk=getLong(TIME_PASSWORD_OK,0);
long timeNow=new Date().getTime();
if (timeNow<timePasswordOk){
return true;
} else {
return false;
}
}
public String getLastEventGeo(){
return getString(PreyConfig.LAST_EVENT_GEO, "");
}
public void setLastEventGeo(String lastEventGeo) {
PreyLogger.d("lastEventGeo["+lastEventGeo+"]");
saveString(PreyConfig.LAST_EVENT_GEO, lastEventGeo);
}
}