| 1 | 1 | package info.guardianproject.notepadbot;
 | 
  | 2 | 2 | 
 | 
  | 3 | 3 | 
 | 
  | 4 |  | import java.io.IOException;
 | 
  | 5 |  | import java.security.GeneralSecurityException;
 | 
  | 6 |  | 
 | 
  | 7 |  | import net.simonvt.numberpicker.NumberPicker;
 | 
  | 8 | 4 | import info.guardianproject.cacheword.CacheWordActivityHandler;
 | 
  | 9 | 5 | import info.guardianproject.cacheword.Constants;
 | 
  | 10 | 6 | import info.guardianproject.cacheword.ICacheWordSubscriber;
 | 
  | 11 | 7 | import info.guardianproject.cacheword.PassphraseSecrets;
 | 
  | 12 | 8 | 
 | 
  |  | 9 | import java.io.IOException;
 | 
  |  | 10 | 
 | 
  |  | 11 | import net.simonvt.numberpicker.NumberPicker;
 | 
  | 13 | 12 | import android.annotation.SuppressLint;
 | 
  | 14 | 13 | import android.app.AlertDialog;
 | 
  | 15 | 14 | import android.content.Context;
 | 
  | ... | ... |  | 
  | 31 | 30 | @SuppressLint("NewApi")
 | 
  | 32 | 31 | @SuppressWarnings("deprecation")
 | 
  | 33 | 32 | public class Settings extends SherlockPreferenceActivity implements ICacheWordSubscriber {
 | 
  | 34 |  | 	
 | 
  |  | 33 | 
 | 
  | 35 | 34 | 	public static final String LANG_SEL_KEY = "langSelected";
 | 
  | 36 |  | 	
 | 
  |  | 35 | 
 | 
  | 37 | 36 | 	private CacheWordActivityHandler mCacheWord;
 | 
  | 38 |  | 	
 | 
  |  | 37 | 
 | 
  | 39 | 38 | 	@Override
 | 
  | 40 | 39 | 	public void onCreate(Bundle savedInstanceState) {
 | 
  | 41 | 40 | 		super.onCreate(savedInstanceState);
 | 
  | 42 | 41 | 		getSupportActionBar().setDisplayHomeAsUpEnabled(true);
 | 
  | 43 |  | 		
 | 
  |  | 42 | 
 | 
  | 44 | 43 | 		mCacheWord = new CacheWordActivityHandler(this, ((App)getApplication()).getCWSettings());
 | 
  | 45 |  | 		
 | 
  |  | 44 | 
 | 
  | 46 | 45 | 		// If in android 3+ use a preference fragment which is the new recommended way
 | 
  | 47 | 46 | 		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
 | 
  | 48 | 47 | 			getFragmentManager().beginTransaction()
 | 
  | ... | ... |  | 
  | 51 | 50 | 						public void onCreate(final Bundle savedInstanceState) {
 | 
  | 52 | 51 | 							super.onCreate(savedInstanceState);
 | 
  | 53 | 52 | 							addPreferencesFromResource(R.xml.settings);
 | 
  | 54 |  | 							findPreference(Constants.SHARED_PREFS_TIMEOUT)
 | 
  |  | 53 | 							findPreference(Constants.SHARED_PREFS_TIMEOUT_SECONDS)
 | 
  | 55 | 54 | 								.setOnPreferenceClickListener(changeLockTimeoutListener);
 | 
  | 56 | 55 | 							findPreference(Constants.SHARED_PREFS_VIBRATE)
 | 
  | 57 | 56 | 								.setOnPreferenceChangeListener(vibrateChangeListener);
 | 
  | 58 | 57 | 							findPreference(Constants.SHARED_PREFS_SECRETS)
 | 
  | 59 | 58 | 								.setOnPreferenceChangeListener(passphraseChangeListener);
 | 
  | 60 |  | 							
 | 
  |  | 59 | 
 | 
  | 61 | 60 | 						}
 | 
  | 62 | 61 | 					})
 | 
  | 63 | 62 | 					.commit();
 | 
  | 64 | 63 | 		} else {
 | 
  | 65 | 64 | 			// Otherwise load the preferences.xml in the Activity like in previous android versions
 | 
  | 66 | 65 | 			addPreferencesFromResource(R.xml.settings);
 | 
  | 67 |  | 			findPreference(Constants.SHARED_PREFS_TIMEOUT)
 | 
  |  | 66 | 			findPreference(Constants.SHARED_PREFS_TIMEOUT_SECONDS)
 | 
  | 68 | 67 | 				.setOnPreferenceClickListener(changeLockTimeoutListener);
 | 
  | 69 | 68 | 			findPreference(Constants.SHARED_PREFS_VIBRATE)
 | 
  | 70 | 69 | 				.setOnPreferenceChangeListener(vibrateChangeListener);
 | 
  | ... | ... |  | 
  | 72 | 71 | 				.setOnPreferenceChangeListener(passphraseChangeListener);
 | 
  | 73 | 72 | 		}
 | 
  | 74 | 73 | 	}
 | 
  | 75 |  | 	
 | 
  | 76 |  | 	
 | 
  | 77 |  | 	
 | 
  |  | 74 | 
 | 
  |  | 75 | 
 | 
  |  | 76 | 
 | 
  | 78 | 77 | 	@Override
 | 
  | 79 | 78 | 	public boolean onOptionsItemSelected(MenuItem item) {
 | 
  | 80 | 79 | 		switch (item.getItemId()) {
 | 
  | ... | ... |  | 
  | 89 | 88 | 	public void onDestroy() {
 | 
  | 90 | 89 | 		super.onDestroy();
 | 
  | 91 | 90 | 	}
 | 
  | 92 |  | 	
 | 
  | 93 |  | 	private Preference.OnPreferenceClickListener changeLockTimeoutListener = 
 | 
  |  | 91 | 
 | 
  |  | 92 | 	private Preference.OnPreferenceClickListener changeLockTimeoutListener =
 | 
  | 94 | 93 | 			new Preference.OnPreferenceClickListener() {
 | 
  | 95 | 94 | 					@Override
 | 
  | 96 | 95 | 					public boolean onPreferenceClick(Preference pref) {
 | 
  | ... | ... |  | 
  | 98 | 97 | 						return true;
 | 
  | 99 | 98 | 					}
 | 
  | 100 | 99 | 	};
 | 
  | 101 |  | 	
 | 
  | 102 |  | 	private Preference.OnPreferenceChangeListener vibrateChangeListener = 
 | 
  |  | 100 | 
 | 
  |  | 101 | 	private Preference.OnPreferenceChangeListener vibrateChangeListener =
 | 
  | 103 | 102 | 			new OnPreferenceChangeListener(){
 | 
  | 104 | 103 | 		@Override
 | 
  | 105 | 104 | 		public boolean onPreferenceChange(Preference pref, Object newValue) {
 | 
  | ... | ... |  | 
  | 108 | 107 | 			return true;
 | 
  | 109 | 108 | 		}
 | 
  | 110 | 109 | 	};
 | 
  | 111 |  | 	
 | 
  | 112 |  | 	private Preference.OnPreferenceChangeListener passphraseChangeListener = 
 | 
  |  | 110 | 
 | 
  |  | 111 | 	private Preference.OnPreferenceChangeListener passphraseChangeListener =
 | 
  | 113 | 112 | 			new OnPreferenceChangeListener(){
 | 
  | 114 | 113 | 		@Override
 | 
  | 115 | 114 | 		public boolean onPreferenceChange(Preference pref, Object newValue) {
 | 
  |  | 115 | 			// save option internally in cacheword as well
 | 
  | 116 | 116 | 			try {
 | 
  | 117 | 117 | 				char[] pass = ((String) newValue).toCharArray();
 | 
  | 118 | 118 | 				if (NConstants.validatePassword(pass)) {
 | 
  | 119 | 119 | 					mCacheWord.changePassphrase((PassphraseSecrets) mCacheWord.getCachedSecrets(), pass);
 | 
  | 120 | 120 | 				} else {
 | 
  | 121 |  | 					Toast.makeText(getApplicationContext(), 
 | 
  |  | 121 | 					Toast.makeText(getApplicationContext(),
 | 
  | 122 | 122 | 							R.string.pass_err_length, Toast.LENGTH_SHORT).show();
 | 
  | 123 | 123 | 				}
 | 
  | 124 | 124 | 			} catch (IOException e) {
 | 
  | 125 |  | 				Toast.makeText(getApplicationContext(), 
 | 
  |  | 125 | 				Toast.makeText(getApplicationContext(),
 | 
  | 126 | 126 | 						R.string.pass_err, Toast.LENGTH_SHORT).show();
 | 
  | 127 | 127 | 			}
 | 
  | 128 | 128 | 			return false;
 | 
  | 129 | 129 | 		}
 | 
  | 130 | 130 | 	};
 | 
  | 131 |  | 	
 | 
  |  | 131 | 
 | 
  | 132 | 132 | 	public static final boolean getNoteLinesOption(Context context) {
 | 
  | 133 | 133 | 		boolean defValue = context.getResources().getBoolean(R.bool.notecipher_uselines_default);
 | 
  | 134 | 134 |         return PreferenceManager.getDefaultSharedPreferences(context).getBoolean(NConstants.SHARED_PREFS_NOTELINES, defValue);
 | 
  | 135 | 135 | 	}
 | 
  | 136 |  | 	
 | 
  |  | 136 | 
 | 
  | 137 | 137 | 	private void changeTimeoutPrompt() {
 | 
  | 138 |  | 		if (mCacheWord.isLocked())
 | 
  | 139 |  |             return;
 | 
  | 140 |  | 		
 | 
  |  | 138 | 		if (mCacheWord.isLocked()) {
 | 
  |  | 139 | 			return;
 | 
  |  | 140 | 		}
 | 
  |  | 141 | 
 | 
  | 141 | 142 |         AlertDialog.Builder builder = new AlertDialog.Builder(this);
 | 
  | 142 | 143 |         builder.setTitle(R.string.change_timeout_prompt_title);
 | 
  | 143 | 144 |         builder.setMessage(R.string.change_timeout_prompt);
 | 
  | 144 | 145 |         final NumberPicker input = new NumberPicker(this);
 | 
  | 145 | 146 |         input.setMinValue(1);
 | 
  | 146 | 147 |         input.setMaxValue(60);
 | 
  | 147 |  |         input.setValue( mCacheWord.getTimeoutMinutes() );
 | 
  |  | 148 |         input.setValue( mCacheWord.getTimeoutSeconds() );
 | 
  | 148 | 149 |         builder.setView(input);
 | 
  | 149 | 150 | 
 | 
  | 150 | 151 |         builder.setPositiveButton("OK",
 | 
  | ... | ... |  | 
  | 152 | 153 |                     @Override
 | 
  | 153 | 154 |                     public void onClick(DialogInterface dialog, int which) {
 | 
  | 154 | 155 |                         int timeout = input.getValue();
 | 
  | 155 |  |                         mCacheWord.setTimeoutMinutes(timeout);
 | 
  |  | 156 |                         mCacheWord.setTimeoutSeconds(timeout);
 | 
  | 156 | 157 |                         dialog.dismiss();
 | 
  | 157 | 158 |                     }
 | 
  | 158 | 159 |                 });
 | 
  | ... | ... |  | 
  | 182 | 183 | 	}
 | 
  | 183 | 184 | 
 | 
  | 184 | 185 | 	@Override
 | 
  | 185 |  | 	public void onCacheWordOpened() { 
 | 
  |  | 186 | 	public void onCacheWordOpened() {
 | 
  | 186 | 187 | 		Log.d(NConstants.TAG, "onCacheWordOpened");
 | 
  | 187 | 188 | 	}
 | 
  | 188 |  | 	
 | 
  |  | 189 | 
 | 
  | 189 | 190 | 	@Override
 | 
  | 190 | 191 |     protected void onPause() {
 | 
  | 191 | 192 |         super.onPause();
 | 
  | ... | ... |  | 
  | 197 | 198 |         super.onResume();
 | 
  | 198 | 199 |         mCacheWord.onResume();
 | 
  | 199 | 200 |     }
 | 
  | 200 |  |     
 | 
  |  | 201 | 
 | 
  | 201 | 202 |     void showLockScreen() {
 | 
  | 202 | 203 |         Intent intent = new Intent(this, LockScreenActivity.class);
 | 
  | 203 | 204 |         intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
 | 
  | ... | ... |  | 
  | 205 | 206 |         startActivity(intent);
 | 
  | 206 | 207 |         finish();
 | 
  | 207 | 208 |     }
 | 
  | 208 |  | }
 | 
  |  | 209 | }
 |