Statistics
| Branch: | Tag: | Revision:

notecipher / app / src / info / guardianproject / notepadbot / Settings.java @ 53196bc0

History | View | Annotate | Download (6.65 KB)

1
package info.guardianproject.notepadbot;
2

    
3

    
4
import info.guardianproject.cacheword.CacheWordActivityHandler;
5
import info.guardianproject.cacheword.Constants;
6
import info.guardianproject.cacheword.ICacheWordSubscriber;
7
import info.guardianproject.cacheword.PassphraseSecrets;
8

    
9
import java.io.IOException;
10

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

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

    
30
@SuppressLint("NewApi")
31
@SuppressWarnings("deprecation")
32
public class Settings extends SherlockPreferenceActivity implements ICacheWordSubscriber {
33

    
34
        public static final String LANG_SEL_KEY = "langSelected";
35

    
36
        private CacheWordActivityHandler mCacheWord;
37

    
38
        @Override
39
        public void onCreate(Bundle savedInstanceState) {
40
                super.onCreate(savedInstanceState);
41
                getSupportActionBar().setDisplayHomeAsUpEnabled(true);
42

    
43
                mCacheWord = new CacheWordActivityHandler(this, ((App)getApplication()).getCWSettings());
44

    
45
                // If in android 3+ use a preference fragment which is the new recommended way
46
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
47
                        getFragmentManager().beginTransaction()
48
                                        .replace(android.R.id.content, new PreferenceFragment() {
49
                                                @Override
50
                                                public void onCreate(final Bundle savedInstanceState) {
51
                                                        super.onCreate(savedInstanceState);
52
                                                        addPreferencesFromResource(R.xml.settings);
53
                                                        findPreference(Constants.SHARED_PREFS_TIMEOUT_SECONDS)
54
                                                                .setOnPreferenceClickListener(changeLockTimeoutListener);
55
                                                        findPreference(Constants.SHARED_PREFS_VIBRATE)
56
                                                                .setOnPreferenceChangeListener(vibrateChangeListener);
57
                                                        findPreference(Constants.SHARED_PREFS_SECRETS)
58
                                                                .setOnPreferenceChangeListener(passphraseChangeListener);
59

    
60
                                                }
61
                                        })
62
                                        .commit();
63
                } else {
64
                        // Otherwise load the preferences.xml in the Activity like in previous android versions
65
                        addPreferencesFromResource(R.xml.settings);
66
                        findPreference(Constants.SHARED_PREFS_TIMEOUT_SECONDS)
67
                                .setOnPreferenceClickListener(changeLockTimeoutListener);
68
                        findPreference(Constants.SHARED_PREFS_VIBRATE)
69
                                .setOnPreferenceChangeListener(vibrateChangeListener);
70
                        findPreference(Constants.SHARED_PREFS_SECRETS)
71
                                .setOnPreferenceChangeListener(passphraseChangeListener);
72
                }
73
        }
74

    
75

    
76

    
77
        @Override
78
        public boolean onOptionsItemSelected(MenuItem item) {
79
                switch (item.getItemId()) {
80
                case android.R.id.home:
81
                        NavUtils.navigateUpTo(this, new Intent(this, NoteCipher.class));
82
                        return true;
83
                }
84
                return super.onOptionsItemSelected(item);
85
        }
86

    
87
        @Override
88
        public void onDestroy() {
89
                super.onDestroy();
90
        }
91

    
92
        private Preference.OnPreferenceClickListener changeLockTimeoutListener =
93
                        new Preference.OnPreferenceClickListener() {
94
                                        @Override
95
                                        public boolean onPreferenceClick(Preference pref) {
96
                                                changeTimeoutPrompt();
97
                                                return true;
98
                                        }
99
        };
100

    
101
        private Preference.OnPreferenceChangeListener vibrateChangeListener =
102
                        new OnPreferenceChangeListener(){
103
                @Override
104
                public boolean onPreferenceChange(Preference pref, Object newValue) {
105
                        // save option internally in cacheword as well
106
                        mCacheWord.setVibrateSetting((Boolean) newValue);
107
                        return true;
108
                }
109
        };
110

    
111
        private Preference.OnPreferenceChangeListener passphraseChangeListener =
112
                        new OnPreferenceChangeListener(){
113
                @Override
114
                public boolean onPreferenceChange(Preference pref, Object newValue) {
115
                        // save option internally in cacheword as well
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

    
142
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
143
        builder.setTitle(R.string.change_timeout_prompt_title);
144
        builder.setMessage(R.string.change_timeout_prompt);
145
        final NumberPicker input = new NumberPicker(this);
146
        input.setMinValue(1);
147
        input.setMaxValue(60);
148
        input.setValue( mCacheWord.getTimeoutSeconds() );
149
        builder.setView(input);
150

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

    
168
        builder.show();
169
    }
170

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

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

    
185
        @Override
186
        public void onCacheWordOpened() {
187
                Log.d(NConstants.TAG, "onCacheWordOpened");
188
        }
189

    
190
        @Override
191
    protected void onPause() {
192
        super.onPause();
193
        mCacheWord.onPause();
194
    }
195

    
196
    @Override
197
    protected void onResume() {
198
        super.onResume();
199
        mCacheWord.onResume();
200
    }
201

    
202
    void showLockScreen() {
203
        Intent intent = new Intent(this, LockScreenActivity.class);
204
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
205
        intent.putExtra("originalIntent", getIntent());
206
        startActivity(intent);
207
        finish();
208
    }
209
}