Project: 2Degrees-Toolbox
/*******************************************************************************
 * Copyright (c) 2011 Jordan Thoms. 
 *  
 * This program is free software: you can redistribute it and/or modify 
 * it under the terms of the GNU General Public License as published by 
 * the Free Software Foundation, either version 3 of the License, or 
 * (at your option) any later version. 
 *  
 * This program is distributed in the hope that it will be useful, 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 * GNU General Public License for more details. 
 *  
 * You should have received a copy of the GNU General Public License 
 * along with this program.  If not, see <http://www.gnu.org/licenses/>. 
 ******************************************************************************/
package biz.shadowservices.DegreesToolbox.Preferences; 
 
import com.actionbarsherlock.app.SherlockPreferenceActivity; 
 
import biz.shadowservices.DegreesToolbox.AbstractWidgetProvider; 
import biz.shadowservices.DegreesToolbox.R; 
import android.os.Bundle; 
import android.preference.EditTextPreference; 
import android.preference.Preference; 
import android.preference.Preference.OnPreferenceChangeListener; 
import android.preference.Preference.OnPreferenceClickListener; 
import android.text.InputType; 
import android.text.method.PasswordTransformationMethod; 
import android.util.Log; 
import android.widget.EditText; 
import android.widget.Toast; 
 
public class BalancePreferencesActivity extends SherlockPreferenceActivity implements OnPreferenceClickListener, OnPreferenceChangeListener { 
 // Generate the constant for the result code which indicates that an update should be requested.   
 public static final int RESULT_FORCE_UPDATE = RESULT_FIRST_USER + 1
 private static String TAG = "2DegreesPreferencesActivity"
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
 
        addPreferencesFromResource(R.xml.preferences); 
        // from http://christophersaunders.ca/blog/2011/01/11/preventing-screen-keyboard-saving-passwords-entered-user/ 
        Preference usernamePref = findPreference("username"); 
        usernamePref.setOnPreferenceChangeListener(this); 
        Preference passwordPref = findPreference("password"); 
        passwordPref.setOnPreferenceClickListener(this); 
        passwordPref.setOnPreferenceChangeListener(this); 
         
        Preference freshTimePref = findPreference("freshTime"); 
        freshTimePref.setOnPreferenceChangeListener(numberCheckListener); 
    } 
    public boolean onPreferenceClick(Preference preference){ 
        if(preference.getKey().equals("password")){ 
            EditTextPreference pref = (EditTextPreference) preference; 
            EditText field = pref.getEditText(); 
            // This informs the keyboard not to show up the autocomplete. 
            // Ensure that you have set this input type, otherwise users 
            // may complain that your application is saving their passwords. 
            field.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD); 
            // This gives us the masking that you see in your password fields 
            field.setTransformationMethod(new PasswordTransformationMethod()); 
        } 
        // We still return false so that the system will handle everything else. 
        // We just needed to ensure that if this preference is the password pref 
        // that it's properly protected from prying eyes. 
        return false
    } 
    protected void onPause() { 
     super.onPause(); 
     AbstractWidgetProvider.setAlarm(this); 
    } 
 @Override 
 public boolean onPreferenceChange(Preference preference, Object newValue) { 
  String key = preference.getKey(); 
  if (key.equals("username") || key.equals("password")) { 
   // If the changed preference is the username or password, set the result so that when we exit, 
   // an update will automatically happen. 
   Log.d(TAG, "Will force update on exit"); 
      setResult(RESULT_FORCE_UPDATE); 
  
  return true
 
    /**
  * Checks that a preference is a valid numerical value 
  */
 
 Preference.OnPreferenceChangeListener numberCheckListener = new OnPreferenceChangeListener() { 
 
     @Override 
     public boolean onPreferenceChange(Preference preference, Object newValue) { 
         //Check that the string is an integer. 
         return numberCheck(newValue); 
     } 
 }; 
 
 private boolean numberCheck(Object newValue) { 
     if( !newValue.toString().equals("")  &&  newValue.toString().matches("\\d*") ) { 
         return true
     } 
     else { 
         Toast.makeText(BalancePreferencesActivity.this, newValue+" "+getResources().getString(R.string.is_an_invalid_number), Toast.LENGTH_SHORT).show(); 
         return false
     } 
 
 
}