OSDN Git Service

Change application name to 'File Manager' (issue #20)
[android-x86/packages-apps-CMFileManager.git] / src / com / cyanogenmod / filemanager / activities / preferences / SettingsPreferences.java
1 /*
2  * Copyright (C) 2012 The CyanogenMod Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package com.cyanogenmod.filemanager.activities.preferences;
18
19 import android.app.ActionBar;
20 import android.content.Intent;
21 import android.os.Bundle;
22 import android.preference.CheckBoxPreference;
23 import android.preference.ListPreference;
24 import android.preference.Preference;
25 import android.preference.Preference.OnPreferenceChangeListener;
26 import android.preference.Preference.OnPreferenceClickListener;
27 import android.preference.PreferenceActivity;
28 import android.preference.PreferenceFragment;
29 import android.provider.SearchRecentSuggestions;
30 import android.util.Log;
31 import android.view.MenuItem;
32 import android.view.View;
33 import android.widget.TextView;
34 import android.widget.Toast;
35
36 import com.cyanogenmod.filemanager.FileManagerApplication;
37 import com.cyanogenmod.filemanager.R;
38 import com.cyanogenmod.filemanager.preferences.FileManagerSettings;
39 import com.cyanogenmod.filemanager.preferences.ObjectStringIdentifier;
40 import com.cyanogenmod.filemanager.preferences.Preferences;
41 import com.cyanogenmod.filemanager.providers.RecentSearchesContentProvider;
42 import com.cyanogenmod.filemanager.util.DialogHelper;
43
44 import java.util.List;
45
46 /**
47  * The {@link SettingsPreferences} preferences
48  */
49 public class SettingsPreferences extends PreferenceActivity {
50
51     private static final boolean DEBUG = false;
52
53     private static final String LOG_TAG = "SettingsPreferences"; //$NON-NLS-1$
54
55     /**
56      * {@inheritDoc}
57      */
58     @Override
59     protected void onCreate(Bundle savedInstanceState) {
60         super.onCreate(savedInstanceState);
61
62         //Initialize action bars
63         initTitleActionBar();
64     }
65
66     /**
67      * Method that initializes the titlebar of the activity.
68      */
69     private void initTitleActionBar() {
70         //Configure the action bar options
71         getActionBar().setBackgroundDrawable(
72                 getResources().getDrawable(R.drawable.bg_holo_titlebar));
73         getActionBar().setDisplayOptions(
74                 ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME);
75         getActionBar().setDisplayHomeAsUpEnabled(true);
76         View customTitle = getLayoutInflater().inflate(R.layout.simple_customtitle, null, false);
77         TextView title = (TextView)customTitle.findViewById(R.id.customtitle_title);
78         title.setText(R.string.pref);
79         title.setContentDescription(getString(R.string.pref));
80         getActionBar().setCustomView(customTitle);
81     }
82
83     /**
84      * {@inheritDoc}
85      */
86     @Override
87     public void onBuildHeaders(List<Header> target) {
88         loadHeadersFromResource(R.xml.preferences_headers, target);
89
90         // Retrieve the about header
91         Header aboutHeader = target.get(target.size()-1);
92         try {
93             String appver =
94                     this.getPackageManager().getPackageInfo(this.getPackageName(), 0).versionName;
95             aboutHeader.summary = getString(R.string.pref_about_summary, appver);
96         } catch (Exception e) {
97             aboutHeader.summary = getString(R.string.pref_about_summary, ""); //$NON-NLS-1$
98         }
99     }
100
101     /**
102      * {@inheritDoc}
103      */
104     @Override
105     public boolean onOptionsItemSelected(MenuItem item) {
106        switch (item.getItemId()) {
107           case android.R.id.home:
108               finish();
109               return true;
110           default:
111              return super.onOptionsItemSelected(item);
112        }
113     }
114
115     /**
116      * A class that manages the commons options of the application
117      */
118     public static class GeneralPreferenceFragment extends PreferenceFragment {
119
120         private CheckBoxPreference mCaseSensitiveSort;
121         private ListPreference mDefaultLongClickAction;
122         private ListPreference mFreeDiskSpaceWarningLevel;
123         private CheckBoxPreference mComputeFolderStatistics;
124         private CheckBoxPreference mAdvancedSettings;
125         private CheckBoxPreference mDebugTraces;
126
127         /**
128          * @hide
129          */
130         boolean mLoaded = false;
131
132         private final OnPreferenceChangeListener mOnChangeListener =
133                 new OnPreferenceChangeListener() {
134             @Override
135             public boolean onPreferenceChange(Preference preference, Object newValue) {
136                 String key = preference.getKey();
137                 if (DEBUG) Log.d(LOG_TAG,
138                         String.format("New value for %s: %s",  //$NON-NLS-1$
139                                 key,
140                                 String.valueOf(newValue)));
141
142                 // Default long-click action
143                 if (FileManagerSettings.SETTINGS_DEFAULT_LONG_CLICK_ACTION.
144                         getId().compareTo(key) == 0) {
145                     int value = Integer.valueOf((String)newValue).intValue();
146                     String[] summary = getResources().getStringArray(
147                             R.array.default_longclick_action_labels);
148                     preference.setSummary(summary[value]);
149                 }
150
151                 // Disk usage warning level
152                 else if (FileManagerSettings.SETTINGS_DISK_USAGE_WARNING_LEVEL.
153                         getId().compareTo(key) == 0) {
154                     String value = (String)newValue;
155                     preference.setSummary(
156                             getResources().getString(
157                                     R.string.pref_disk_usage_warning_level_summary, value));
158                 }
159
160                 // Notify the change (only if fragment is loaded. Default values are loaded
161                 // while not in loaded mode)
162                 if (GeneralPreferenceFragment.this.mLoaded) {
163                     Intent intent = new Intent(FileManagerSettings.INTENT_SETTING_CHANGED);
164                     intent.putExtra(
165                             FileManagerSettings.EXTRA_SETTING_CHANGED_KEY, preference.getKey());
166                     getActivity().sendBroadcast(intent);
167                 }
168
169                 return true;
170             }
171         };
172
173         /**
174          * {@inheritDoc}
175          */
176         @Override
177         public void onCreate(Bundle savedInstanceState) {
178             super.onCreate(savedInstanceState);
179
180             // Change the preference manager
181             getPreferenceManager().setSharedPreferencesName(Preferences.SETTINGS_FILENAME);
182             getPreferenceManager().setSharedPreferencesMode(MODE_PRIVATE);
183
184             // Add the preferences
185             addPreferencesFromResource(R.xml.preferences_general);
186
187             // Case sensitive sort
188             this.mCaseSensitiveSort =
189                     (CheckBoxPreference)findPreference(
190                             FileManagerSettings.SETTINGS_CASE_SENSITIVE_SORT.getId());
191             this.mCaseSensitiveSort.setOnPreferenceChangeListener(this.mOnChangeListener);
192
193             // Default long-click action
194             this.mDefaultLongClickAction =
195                     (ListPreference)findPreference(
196                             FileManagerSettings.SETTINGS_DEFAULT_LONG_CLICK_ACTION.getId());
197             this.mDefaultLongClickAction.setOnPreferenceChangeListener(this.mOnChangeListener);
198             String defaultValue = ((ObjectStringIdentifier)FileManagerSettings.
199                                     SETTINGS_DEFAULT_LONG_CLICK_ACTION.getDefaultValue()).getId();
200             String value = Preferences.getSharedPreferences().getString(
201                                     FileManagerSettings.SETTINGS_DEFAULT_LONG_CLICK_ACTION.getId(),
202                                     defaultValue);
203             this.mOnChangeListener.onPreferenceChange(this.mDefaultLongClickAction, value);
204
205             //Disk usage warning level
206             this.mFreeDiskSpaceWarningLevel =
207                     (ListPreference)findPreference(
208                             FileManagerSettings.SETTINGS_DISK_USAGE_WARNING_LEVEL.getId());
209             this.mFreeDiskSpaceWarningLevel.setOnPreferenceChangeListener(this.mOnChangeListener);
210             defaultValue = ((String)FileManagerSettings.
211                                 SETTINGS_DISK_USAGE_WARNING_LEVEL.getDefaultValue());
212             value = Preferences.getSharedPreferences().getString(
213                                 FileManagerSettings.SETTINGS_DISK_USAGE_WARNING_LEVEL.getId(),
214                                 defaultValue);
215             this.mOnChangeListener.onPreferenceChange(this.mFreeDiskSpaceWarningLevel, value);
216
217             // Compute folder statistics
218             this.mComputeFolderStatistics =
219                     (CheckBoxPreference)findPreference(
220                             FileManagerSettings.SETTINGS_COMPUTE_FOLDER_STATISTICS.getId());
221             this.mComputeFolderStatistics.setOnPreferenceChangeListener(this.mOnChangeListener);
222
223             // Advanced settings
224             this.mAdvancedSettings =
225                     (CheckBoxPreference)findPreference(
226                             FileManagerSettings.SETTINGS_ADVANCE_MODE.getId());
227             if (FileManagerApplication.isDeviceRooted()) {
228                 this.mAdvancedSettings.setOnPreferenceChangeListener(this.mOnChangeListener);
229             } else {
230                 // Disable the advanced mode
231                 this.mAdvancedSettings.setEnabled(false);
232             }
233
234             // Capture Debug traces
235             this.mDebugTraces =
236                     (CheckBoxPreference)findPreference(
237                             FileManagerSettings.SETTINGS_SHOW_TRACES.getId());
238             this.mDebugTraces.setOnPreferenceChangeListener(this.mOnChangeListener);
239
240             // Loaded
241             this.mLoaded = true;
242         }
243     }
244
245     /**
246      * A class that manages the search options
247      */
248     public static class SearchPreferenceFragment extends PreferenceFragment {
249
250         // Internal keys
251         private static final String REMOVE_SEARCH_TERMS_KEY =
252                                             "cm_filemanager_remove_saved_search_terms"; //$NON-NLS-1$
253
254         private CheckBoxPreference mHighlightTerms;
255         private CheckBoxPreference mShowRelevanceWidget;
256         private ListPreference mSortSearchResultMode;
257         private CheckBoxPreference mSaveSearchTerms;
258         private Preference mRemoveSearchTerms;
259
260         /**
261          * @hide
262          */
263         boolean mLoaded = false;
264
265         private final OnPreferenceChangeListener mOnChangeListener =
266                 new OnPreferenceChangeListener() {
267             @Override
268             public boolean onPreferenceChange(Preference preference, Object newValue) {
269                 String key = preference.getKey();
270                 if (DEBUG) Log.d(LOG_TAG,
271                         String.format("New value for %s: %s",  //$NON-NLS-1$
272                                 key,
273                                 String.valueOf(newValue)));
274
275                 // Saved search terms
276                 if (preference.getKey().compareTo(
277                         FileManagerSettings.SETTINGS_SAVE_SEARCH_TERMS.getId()) == 0) {
278                     if (!((Boolean)newValue).booleanValue()) {
279                         // Remove search terms if saved search terms
280                         // is not active by the user
281                         clearRecentSearchTerms();
282                     }
283
284                 // Sort search result mode
285                 } else if (FileManagerSettings.SETTINGS_SORT_SEARCH_RESULTS_MODE.
286                         getId().compareTo(key) == 0) {
287                     int value = Integer.valueOf((String)newValue).intValue();
288                     String[] summary = getResources().getStringArray(
289                             R.array.sort_search_results_mode_labels);
290                     preference.setSummary(summary[value]);
291                 }
292
293                 // Notify the change (only if fragment is loaded. Default values are loaded
294                 // while not in loaded mode)
295                 if (SearchPreferenceFragment.this.mLoaded) {
296                     Intent intent = new Intent(FileManagerSettings.INTENT_SETTING_CHANGED);
297                     intent.putExtra(
298                             FileManagerSettings.EXTRA_SETTING_CHANGED_KEY, preference.getKey());
299                     getActivity().sendBroadcast(intent);
300                 }
301
302                 return true;
303             }
304         };
305
306         private final OnPreferenceClickListener mOnClickListener =
307                 new Preference.OnPreferenceClickListener() {
308             @Override
309             public boolean onPreferenceClick(Preference preference) {
310                 if (preference.getKey().compareTo(REMOVE_SEARCH_TERMS_KEY) == 0) {
311                     // Remove search terms
312                     clearRecentSearchTerms();
313
314                     // Advise the user
315                     DialogHelper.showToast(
316                             getActivity(),
317                             getActivity().getString(R.string.pref_remove_saved_search_terms_msg),
318                             Toast.LENGTH_SHORT);
319                 }
320                 return false;
321             }
322         };
323
324         /**
325          * {@inheritDoc}
326          */
327         @Override
328         public void onCreate(Bundle savedInstanceState) {
329             super.onCreate(savedInstanceState);
330
331             // Change the preference manager
332             getPreferenceManager().setSharedPreferencesName(Preferences.SETTINGS_FILENAME);
333             getPreferenceManager().setSharedPreferencesMode(MODE_PRIVATE);
334             this.mLoaded = false;
335
336             // Add the preferences
337             addPreferencesFromResource(R.xml.preferences_search);
338
339             // Highlight terms
340             this.mHighlightTerms =
341                     (CheckBoxPreference)findPreference(
342                             FileManagerSettings.SETTINGS_HIGHLIGHT_TERMS.getId());
343             this.mHighlightTerms.setOnPreferenceChangeListener(this.mOnChangeListener);
344
345             // Relevance widget
346             this.mShowRelevanceWidget =
347                     (CheckBoxPreference)findPreference(
348                             FileManagerSettings.SETTINGS_SHOW_RELEVANCE_WIDGET.getId());
349             this.mShowRelevanceWidget.setOnPreferenceChangeListener(this.mOnChangeListener);
350
351             // Sort search result mode
352             this.mSortSearchResultMode =
353                     (ListPreference)findPreference(
354                             FileManagerSettings.SETTINGS_SORT_SEARCH_RESULTS_MODE.getId());
355             this.mSortSearchResultMode.setOnPreferenceChangeListener(this.mOnChangeListener);
356             String defaultValue = ((ObjectStringIdentifier)FileManagerSettings.
357                                     SETTINGS_SORT_SEARCH_RESULTS_MODE.getDefaultValue()).getId();
358             String value = Preferences.getSharedPreferences().getString(
359                                     FileManagerSettings.SETTINGS_SORT_SEARCH_RESULTS_MODE.getId(),
360                                     defaultValue);
361             this.mOnChangeListener.onPreferenceChange(this.mSortSearchResultMode, value);
362
363             // Saved search terms
364             this.mSaveSearchTerms =
365                     (CheckBoxPreference)findPreference(
366                             FileManagerSettings.SETTINGS_SAVE_SEARCH_TERMS.getId());
367             this.mSaveSearchTerms.setOnPreferenceChangeListener(this.mOnChangeListener);
368
369             // Remove search terms
370             this.mRemoveSearchTerms = findPreference(REMOVE_SEARCH_TERMS_KEY);
371             this.mRemoveSearchTerms.setOnPreferenceClickListener(this.mOnClickListener);
372
373             // Loaded
374             this.mLoaded = true;
375         }
376
377         /**
378          * Method that removes the recent suggestions on search activity
379          * @hide
380          */
381         void clearRecentSearchTerms() {
382             SearchRecentSuggestions suggestions =
383                     new SearchRecentSuggestions(getActivity(),
384                             RecentSearchesContentProvider.AUTHORITY,
385                             RecentSearchesContentProvider.MODE);
386             suggestions.clearHistory();
387             Preferences.setLastSearch(null);
388         }
389     }
390
391 }