/** ** Copyright (c) 2010 Ushahidi Inc ** All rights reserved ** Contact: team@ushahidi.com ** Website: http://www.ushahidi.com ** ** GNU Lesser General Public License Usage ** This file may be used under the terms of the GNU Lesser ** General Public License version 3 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements ** will be met: http://www.gnu.org/licenses/lgpl.html. ** ** ** If you have questions regarding the use of this file, please contact ** Ushahidi developers at team@ushahidi.com. ** **/ package com.ushahidi.android.app; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.os.Bundle; import android.preference.EditTextPreference; import android.preference.ListPreference; import android.preference.PreferenceActivity; import android.preference.PreferenceCategory; import android.preference.PreferenceScreen; import android.text.InputType; import com.ushahidi.android.app.ui.SeekBarPreference; import com.ushahidi.android.app.util.Util; public class Settings extends PreferenceActivity implements OnSharedPreferenceChangeListener { private EditTextPreference firstNamePref; private EditTextPreference lastNamePref; private EditTextPreference emailAddressPref; private EditTextPreference phoneNumberPref; private ListPreference totalReportsPref; private ListPreference mapTileProviderPref; private SeekBarPreference photoSizePref; private SharedPreferences settings; private SharedPreferences.Editor editor; public static final String EMAIL_ADDRESS_PREFERENCE = "email_address_preference"; public static final String PHONE_NUMBER_PREFERENCE = "phone_number_preference"; public static final String CHECKIN_PREFERENCE = "checkin_preference"; public static final String PHOTO_SIZE_PREFERENCE = "photo_size_preference"; public static final String MAP_TILE_PROVIDER_PREFERENCE = "map_tile_provider_preference"; private String recentReports = ""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); firstNamePref = new EditTextPreference(this); lastNamePref = new EditTextPreference(this); emailAddressPref = new EditTextPreference(this); phoneNumberPref = new EditTextPreference(this); photoSizePref = (SeekBarPreference) getPreferenceScreen() .findPreference(PHOTO_SIZE_PREFERENCE); photoSizePref.setMax(Util.getScreenWidth(this)); recentReports = getString(R.string.recent_reports); totalReportsPref = new ListPreference(this); mapTileProviderPref = new ListPreference(this); new ListPreference(this); setPreferenceScreen(createPreferenceHierarchy()); this.saveSettings(); } private PreferenceScreen createPreferenceHierarchy() { // ROOT element PreferenceScreen root = getPreferenceManager().createPreferenceScreen( this); // Basic preferences PreferenceCategory basicPrefCat = new PreferenceCategory(this); basicPrefCat.setTitle(R.string.basic_settings); root.addPreference(basicPrefCat); // Total reports to fetch at a time // set list values // TODO:// need to look into how to properly handle this. It looks ugly // but it works. CharSequence[] totalReportsEntries = { "20 ".concat(recentReports), "40 ".concat(recentReports), "60 ".concat(recentReports), "80 ".concat(recentReports), "100 ".concat(recentReports), "250 ".concat(recentReports), "500 ".concat(recentReports), "1000 ".concat(recentReports) }; CharSequence[] totalReportsValues = { "20", "40", "60", "80", "100", "250", "500", "1000" }; CharSequence[] mapTileEntries = { "Google Tiles", "OSM Tiles ", "Mapbox Tiles" }; CharSequence[] mapTileValues = { "google", "osm", "mapbox" }; totalReportsPref.setEntries(totalReportsEntries); totalReportsPref.setEntryValues(totalReportsValues); totalReportsPref.setDefaultValue(totalReportsValues[0]); totalReportsPref.setDialogTitle(R.string.total_reports); totalReportsPref.setKey("total_reports_preference"); totalReportsPref.setTitle(R.string.total_reports); totalReportsPref.setSummary(R.string.hint_total_reports); basicPrefCat.addPreference(totalReportsPref); // Map tile preference mapTileProviderPref.setEntries(mapTileEntries); mapTileProviderPref.setKey(MAP_TILE_PROVIDER_PREFERENCE); mapTileProviderPref.setTitle(R.string.map_tiles); mapTileProviderPref.setSummary(R.string.map_tiles_summary); mapTileProviderPref.setDialogTitle(R.string.map_tiles); mapTileProviderPref.setEntryValues(mapTileValues); mapTileProviderPref.setDefaultValue(mapTileValues[0]); basicPrefCat.addPreference(mapTileProviderPref); // First name entry field firstNamePref.setDialogTitle(R.string.txt_first_name); firstNamePref.setKey("first_name_preference"); firstNamePref.setTitle(R.string.txt_first_name); firstNamePref.setSummary(R.string.hint_first_name); firstNamePref.getEditText().setInputType( InputType.TYPE_TEXT_VARIATION_PERSON_NAME); basicPrefCat.addPreference(firstNamePref); // Last name entry field lastNamePref.setDialogTitle(R.string.txt_last_name); lastNamePref.setKey("last_name_preference"); lastNamePref.setTitle(R.string.txt_last_name); lastNamePref.setSummary(R.string.hint_last_name); lastNamePref.getEditText().setInputType( InputType.TYPE_TEXT_VARIATION_PERSON_NAME); basicPrefCat.addPreference(lastNamePref); // Email name entry field emailAddressPref.setDialogTitle(R.string.txt_email); emailAddressPref.setKey("email_address_preference"); emailAddressPref.setTitle(R.string.txt_email); emailAddressPref.setSummary(R.string.hint_email); emailAddressPref.getEditText().setInputType( InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS); basicPrefCat.addPreference(emailAddressPref); // phone number entry field phoneNumberPref.setDialogTitle(R.string.txt_phonenumber); phoneNumberPref.setKey("phone_number_preference"); phoneNumberPref.setTitle(R.string.txt_phonenumber); phoneNumberPref.setSummary(R.string.hint_phonenumber); phoneNumberPref.getEditText().setInputType(InputType.TYPE_CLASS_PHONE); // GeneratePhotoFilename resize seekbar basicPrefCat.addPreference(photoSizePref); return root; } protected void saveSettings() { settings = getSharedPreferences(Preferences.PREFS_NAME, 0); editor = settings.edit(); String totalReports = totalReportsPref.getValue(); String mapTiles = mapTileProviderPref.getValue(); editor.putString("Domain", Preferences.domain); editor.putString("Firstname", firstNamePref.getText()); editor.putString("Lastname", lastNamePref.getText()); editor.putString("Email", emailAddressPref.getText()); editor.putString("Phonenumber", phoneNumberPref.getText()); editor.putString("TotalReports", totalReports); editor.putString("MapTiles", mapTiles); editor.putInt("CheckinEnabled", Preferences.isCheckinEnabled); editor.putInt("PhotoWidth", photoSizePref.getProgress()); editor.commit(); } @Override protected void onResume() { super.onResume(); // Set up a listener whenever a key changes getPreferenceScreen().getSharedPreferences() .registerOnSharedPreferenceChangeListener(this); this.saveSettings(); } @Override protected void onPause() { super.onPause(); // Unregister the listener whenever a key changes getPreferenceScreen().getSharedPreferences() .unregisterOnSharedPreferenceChangeListener(this); } public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { // photo size if (key.equals(PHOTO_SIZE_PREFERENCE)) { if (sharedPreferences.getInt(PHOTO_SIZE_PREFERENCE, 200) > Preferences.photoWidth) { Preferences.photoWidth = sharedPreferences.getInt( PHOTO_SIZE_PREFERENCE, 200); } } // validate email address if (key.equals(EMAIL_ADDRESS_PREFERENCE)) { if (!Util.validateEmail(sharedPreferences.getString( EMAIL_ADDRESS_PREFERENCE, ""))) { Util.showToast(this, R.string.invalid_email_address); } } // save changes this.saveSettings(); } }