Statistics
| Branch: | Tag: | Revision:

notecipher / app / src / info / guardianproject / notepadbot / Settings.java @ 72d577fb

History | View | Annotate | Download (6.67 KB)

1
package info.guardianproject.notepadbot;
2

    
3

    
4
import java.io.IOException;
5
import java.security.GeneralSecurityException;
6

    
7
import net.simonvt.numberpicker.NumberPicker;
8
import info.guardianproject.cacheword.CacheWordActivityHandler;
9
import info.guardianproject.cacheword.Constants;
10
import info.guardianproject.cacheword.ICacheWordSubscriber;
11
import info.guardianproject.cacheword.PassphraseSecrets;
12

    
13
import android.annotation.SuppressLint;
14
import android.app.AlertDialog;
15
import android.content.Context;
16
import android.content.DialogInterface;
17
import android.content.Intent;
18
import android.os.Build;
19
import android.os.Bundle;
20
import android.preference.Preference;
21
import android.preference.Preference.OnPreferenceChangeListener;
22
import android.preference.PreferenceFragment;
23
import android.preference.PreferenceManager;
24
import android.support.v4.app.NavUtils;
25
import android.util.Log;
26
import android.widget.Toast;
27

    
28
import com.actionbarsherlock.app.SherlockPreferenceActivity;
29
import com.actionbarsherlock.view.MenuItem;
30

    
31
@SuppressLint("NewApi")
32
@SuppressWarnings("deprecation")
33
public class Settings extends SherlockPreferenceActivity implements ICacheWordSubscriber {
34
        
35
        public static final String LANG_SEL_KEY = "langSelected";
36
        
37
        private CacheWordActivityHandler mCacheWord;
38
        
39
        @Override
40
        public void onCreate(Bundle savedInstanceState) {
41
                super.onCreate(savedInstanceState);
42
                getSupportActionBar().setDisplayHomeAsUpEnabled(true);
43
                
44
                mCacheWord = new CacheWordActivityHandler(this, ((App)getApplication()).getCWSettings());
45
                
46
                // If in android 3+ use a preference fragment which is the new recommended way
47
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
48
                        getFragmentManager().beginTransaction()
49
                                        .replace(android.R.id.content, new PreferenceFragment() {
50
                                                @Override
51
                                                public void onCreate(final Bundle savedInstanceState) {
52
                                                        super.onCreate(savedInstanceState);
53
                                                        addPreferencesFromResource(R.xml.settings);
54
                                                        findPreference(Constants.SHARED_PREFS_TIMEOUT)
55
                                                                .setOnPreferenceClickListener(changeLockTimeoutListener);
56
                                                        findPreference(Constants.SHARED_PREFS_VIBRATE)
57
                                                                .setOnPreferenceChangeListener(vibrateChangeListener);
58
                                                        findPreference(Constants.SHARED_PREFS_SECRETS)
59
                                                                .setOnPreferenceChangeListener(passphraseChangeListener);
60
                                                        
61
                                                }
62
                                        })
63
                                        .commit();
64
                } else {
65
                        // Otherwise load the preferences.xml in the Activity like in previous android versions
66
                        addPreferencesFromResource(R.xml.settings);
67
                        findPreference(Constants.SHARED_PREFS_TIMEOUT)
68
                                .setOnPreferenceClickListener(changeLockTimeoutListener);
69
                        findPreference(Constants.SHARED_PREFS_VIBRATE)
70
                                .setOnPreferenceChangeListener(vibrateChangeListener);
71
                        findPreference(Constants.SHARED_PREFS_SECRETS)
72
                                .setOnPreferenceChangeListener(passphraseChangeListener);
73
                }
74
        }
75
        
76
        
77
        
78
        @Override
79
        public boolean onOptionsItemSelected(MenuItem item) {
80
                switch (item.getItemId()) {
81
                case android.R.id.home:
82
                        NavUtils.navigateUpTo(this, new Intent(this, NoteCipher.class));
83
                        return true;
84
                }
85
                return super.onOptionsItemSelected(item);
86
        }
87

    
88
        @Override
89
        public void onDestroy() {
90
                super.onDestroy();
91
        }
92
        
93
        private Preference.OnPreferenceClickListener changeLockTimeoutListener = 
94
                        new Preference.OnPreferenceClickListener() {
95
                                        @Override
96
                                        public boolean onPreferenceClick(Preference pref) {
97
                                                changeTimeoutPrompt();
98
                                                return true;
99
                                        }
100
        };
101
        
102
        private Preference.OnPreferenceChangeListener vibrateChangeListener = 
103
                        new OnPreferenceChangeListener(){
104
                @Override
105
                public boolean onPreferenceChange(Preference pref, Object newValue) {
106
                        // save option internally in cacheword as well
107
                        mCacheWord.setVibrateSetting((Boolean) newValue);
108
                        return true;
109
                }
110
        };
111
        
112
        private Preference.OnPreferenceChangeListener passphraseChangeListener = 
113
                        new OnPreferenceChangeListener(){
114
                @Override
115
                public boolean onPreferenceChange(Preference pref, Object newValue) {
116
                        try {
117
                                char[] pass = ((String) newValue).toCharArray();
118
                                if (NConstants.validatePassword(pass)) {
119
                                        mCacheWord.changePassphrase((PassphraseSecrets) mCacheWord.getCachedSecrets(), pass);
120
                                } else {
121
                                        Toast.makeText(getApplicationContext(), 
122
                                                        R.string.pass_err_length, Toast.LENGTH_SHORT).show();
123
                                }
124
                        } catch (IOException e) {
125
                                Toast.makeText(getApplicationContext(), 
126
                                                R.string.pass_err, Toast.LENGTH_SHORT).show();
127
                        }
128
                        return false;
129
                }
130
        };
131
        
132
        public static final boolean getNoteLinesOption(Context context) {
133
                boolean defValue = context.getResources().getBoolean(R.bool.notecipher_uselines_default);
134
        return PreferenceManager.getDefaultSharedPreferences(context).getBoolean(NConstants.SHARED_PREFS_NOTELINES, defValue);
135
        }
136
        
137
        private void changeTimeoutPrompt() {
138
                if (mCacheWord.isLocked())
139
            return;
140
                
141
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
142
        builder.setTitle(R.string.change_timeout_prompt_title);
143
        builder.setMessage(R.string.change_timeout_prompt);
144
        final NumberPicker input = new NumberPicker(this);
145
        input.setMinValue(1);
146
        input.setMaxValue(60);
147
        input.setValue( mCacheWord.getTimeoutMinutes() );
148
        builder.setView(input);
149

    
150
        builder.setPositiveButton("OK",
151
                new DialogInterface.OnClickListener() {
152
                    @Override
153
                    public void onClick(DialogInterface dialog, int which) {
154
                        int timeout = input.getValue();
155
                        mCacheWord.setTimeoutMinutes(timeout);
156
                        dialog.dismiss();
157
                    }
158
                });
159
        builder.setNegativeButton("Cancel",
160
                new DialogInterface.OnClickListener() {
161
                    @Override
162
                    public void onClick(DialogInterface dialog, int which) {
163
                        dialog.cancel();
164
                    }
165
                });
166

    
167
        builder.show();
168
    }
169

    
170
        @Override
171
        public void onCacheWordUninitialized() {
172
                Log.d(NConstants.TAG, "onCacheWordUninitialized");
173
                System.gc();
174
                showLockScreen();
175
        }
176

    
177
        @Override
178
        public void onCacheWordLocked() {
179
                Log.d(NConstants.TAG, "onCacheWordLocked");
180
                System.gc();
181
                showLockScreen();
182
        }
183

    
184
        @Override
185
        public void onCacheWordOpened() { 
186
                Log.d(NConstants.TAG, "onCacheWordOpened");
187
        }
188
        
189
        @Override
190
    protected void onPause() {
191
        super.onPause();
192
        mCacheWord.onPause();
193
    }
194

    
195
    @Override
196
    protected void onResume() {
197
        super.onResume();
198
        mCacheWord.onResume();
199
    }
200
    
201
    void showLockScreen() {
202
        Intent intent = new Intent(this, LockScreenActivity.class);
203
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
204
        intent.putExtra("originalIntent", getIntent());
205
        startActivity(intent);
206
        finish();
207
    }
208
}