OSDN Git Service

Remove actions menu icon (issue #21)
[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 mFreeDiskSpaceWarningLevel;
122         private CheckBoxPreference mComputeFolderStatistics;
123         private CheckBoxPreference mAdvancedSettings;
124         private CheckBoxPreference mDebugTraces;
125
126         /**
127          * @hide
128          */
129         boolean mLoaded = false;
130
131         private final OnPreferenceChangeListener mOnChangeListener =
132                 new OnPreferenceChangeListener() {
133             @Override
134             public boolean onPreferenceChange(Preference preference, Object newValue) {
135                 String key = preference.getKey();
136                 if (DEBUG) Log.d(LOG_TAG,
137                         String.format("New value for %s: %s",  //$NON-NLS-1$
138                                 key,
139                                 String.valueOf(newValue)));
140
141                 // Disk usage warning level
142                 else if (FileManagerSettings.SETTINGS_DISK_USAGE_WARNING_LEVEL.
143                         getId().compareTo(key) == 0) {
144                     String value = (String)newValue;
145                     preference.setSummary(
146                             getResources().getString(
147                                     R.string.pref_disk_usage_warning_level_summary, value));
148                 }
149
150                 // Notify the change (only if fragment is loaded. Default values are loaded
151                 // while not in loaded mode)
152                 if (GeneralPreferenceFragment.this.mLoaded) {
153                     Intent intent = new Intent(FileManagerSettings.INTENT_SETTING_CHANGED);
154                     intent.putExtra(
155                             FileManagerSettings.EXTRA_SETTING_CHANGED_KEY, preference.getKey());
156                     getActivity().sendBroadcast(intent);
157                 }
158
159                 return true;
160             }
161         };
162
163         /**
164          * {@inheritDoc}
165          */
166         @Override
167         public void onCreate(Bundle savedInstanceState) {
168             super.onCreate(savedInstanceState);
169
170             // Change the preference manager
171             getPreferenceManager().setSharedPreferencesName(Preferences.SETTINGS_FILENAME);
172             getPreferenceManager().setSharedPreferencesMode(MODE_PRIVATE);
173
174             // Add the preferences
175             addPreferencesFromResource(R.xml.preferences_general);
176
177             // Case sensitive sort
178             this.mCaseSensitiveSort =
179                     (CheckBoxPreference)findPreference(
180                             FileManagerSettings.SETTINGS_CASE_SENSITIVE_SORT.getId());
181             this.mCaseSensitiveSort.setOnPreferenceChangeListener(this.mOnChangeListener);
182
183             //Disk usage warning level
184             this.mFreeDiskSpaceWarningLevel =
185                     (ListPreference)findPreference(
186                             FileManagerSettings.SETTINGS_DISK_USAGE_WARNING_LEVEL.getId());
187             this.mFreeDiskSpaceWarningLevel.setOnPreferenceChangeListener(this.mOnChangeListener);
188             String defaultValue = ((String)FileManagerSettings.
189                                 SETTINGS_DISK_USAGE_WARNING_LEVEL.getDefaultValue());
190             String value = Preferences.getSharedPreferences().getString(
191                                 FileManagerSettings.SETTINGS_DISK_USAGE_WARNING_LEVEL.getId(),
192                                 defaultValue);
193             this.mOnChangeListener.onPreferenceChange(this.mFreeDiskSpaceWarningLevel, value);
194
195             // Compute folder statistics
196             this.mComputeFolderStatistics =
197                     (CheckBoxPreference)findPreference(
198                             FileManagerSettings.SETTINGS_COMPUTE_FOLDER_STATISTICS.getId());
199             this.mComputeFolderStatistics.setOnPreferenceChangeListener(this.mOnChangeListener);
200
201             // Advanced settings
202             this.mAdvancedSettings =
203                     (CheckBoxPreference)findPreference(
204                             FileManagerSettings.SETTINGS_ADVANCE_MODE.getId());
205             if (FileManagerApplication.isDeviceRooted()) {
206                 this.mAdvancedSettings.setOnPreferenceChangeListener(this.mOnChangeListener);
207             } else {
208                 // Disable the advanced mode
209                 this.mAdvancedSettings.setEnabled(false);
210             }
211
212             // Capture Debug traces
213             this.mDebugTraces =
214                     (CheckBoxPreference)findPreference(
215                             FileManagerSettings.SETTINGS_SHOW_TRACES.getId());
216             this.mDebugTraces.setOnPreferenceChangeListener(this.mOnChangeListener);
217
218             // Loaded
219             this.mLoaded = true;
220         }
221     }
222
223     /**
224      * A class that manages the search options
225      */
226     public static class SearchPreferenceFragment extends PreferenceFragment {
227
228         // Internal keys
229         private static final String REMOVE_SEARCH_TERMS_KEY =
230                                             "cm_filemanager_remove_saved_search_terms"; //$NON-NLS-1$
231
232         private CheckBoxPreference mHighlightTerms;
233         private CheckBoxPreference mShowRelevanceWidget;
234         private ListPreference mSortSearchResultMode;
235         private CheckBoxPreference mSaveSearchTerms;
236         private Preference mRemoveSearchTerms;
237
238         /**
239          * @hide
240          */
241         boolean mLoaded = false;
242
243         private final OnPreferenceChangeListener mOnChangeListener =
244                 new OnPreferenceChangeListener() {
245             @Override
246             public boolean onPreferenceChange(Preference preference, Object newValue) {
247                 String key = preference.getKey();
248                 if (DEBUG) Log.d(LOG_TAG,
249                         String.format("New value for %s: %s",  //$NON-NLS-1$
250                                 key,
251                                 String.valueOf(newValue)));
252
253                 // Saved search terms
254                 if (preference.getKey().compareTo(
255                         FileManagerSettings.SETTINGS_SAVE_SEARCH_TERMS.getId()) == 0) {
256                     if (!((Boolean)newValue).booleanValue()) {
257                         // Remove search terms if saved search terms
258                         // is not active by the user
259                         clearRecentSearchTerms();
260                     }
261
262                 // Sort search result mode
263                 } else if (FileManagerSettings.SETTINGS_SORT_SEARCH_RESULTS_MODE.
264                         getId().compareTo(key) == 0) {
265                     int value = Integer.valueOf((String)newValue).intValue();
266                     String[] summary = getResources().getStringArray(
267                             R.array.sort_search_results_mode_labels);
268                     preference.setSummary(summary[value]);
269                 }
270
271                 // Notify the change (only if fragment is loaded. Default values are loaded
272                 // while not in loaded mode)
273                 if (SearchPreferenceFragment.this.mLoaded) {
274                     Intent intent = new Intent(FileManagerSettings.INTENT_SETTING_CHANGED);
275                     intent.putExtra(
276                             FileManagerSettings.EXTRA_SETTING_CHANGED_KEY, preference.getKey());
277                     getActivity().sendBroadcast(intent);
278                 }
279
280                 return true;
281             }
282         };
283
284         private final OnPreferenceClickListener mOnClickListener =
285                 new Preference.OnPreferenceClickListener() {
286             @Override
287             public boolean onPreferenceClick(Preference preference) {
288                 if (preference.getKey().compareTo(REMOVE_SEARCH_TERMS_KEY) == 0) {
289                     // Remove search terms
290                     clearRecentSearchTerms();
291
292                     // Advise the user
293                     DialogHelper.showToast(
294                             getActivity(),
295                             getActivity().getString(R.string.pref_remove_saved_search_terms_msg),
296                             Toast.LENGTH_SHORT);
297                 }
298                 return false;
299             }
300         };
301
302         /**
303          * {@inheritDoc}
304          */
305         @Override
306         public void onCreate(Bundle savedInstanceState) {
307             super.onCreate(savedInstanceState);
308
309             // Change the preference manager
310             getPreferenceManager().setSharedPreferencesName(Preferences.SETTINGS_FILENAME);
311             getPreferenceManager().setSharedPreferencesMode(MODE_PRIVATE);
312             this.mLoaded = false;
313
314             // Add the preferences
315             addPreferencesFromResource(R.xml.preferences_search);
316
317             // Highlight terms
318             this.mHighlightTerms =
319                     (CheckBoxPreference)findPreference(
320                             FileManagerSettings.SETTINGS_HIGHLIGHT_TERMS.getId());
321             this.mHighlightTerms.setOnPreferenceChangeListener(this.mOnChangeListener);
322
323             // Relevance widget
324             this.mShowRelevanceWidget =
325                     (CheckBoxPreference)findPreference(
326                             FileManagerSettings.SETTINGS_SHOW_RELEVANCE_WIDGET.getId());
327             this.mShowRelevanceWidget.setOnPreferenceChangeListener(this.mOnChangeListener);
328
329             // Sort search result mode
330             this.mSortSearchResultMode =
331                     (ListPreference)findPreference(
332                             FileManagerSettings.SETTINGS_SORT_SEARCH_RESULTS_MODE.getId());
333             this.mSortSearchResultMode.setOnPreferenceChangeListener(this.mOnChangeListener);
334             String defaultValue = ((ObjectStringIdentifier)FileManagerSettings.
335                                     SETTINGS_SORT_SEARCH_RESULTS_MODE.getDefaultValue()).getId();
336             String value = Preferences.getSharedPreferences().getString(
337                                     FileManagerSettings.SETTINGS_SORT_SEARCH_RESULTS_MODE.getId(),
338                                     defaultValue);
339             this.mOnChangeListener.onPreferenceChange(this.mSortSearchResultMode, value);
340
341             // Saved search terms
342             this.mSaveSearchTerms =
343                     (CheckBoxPreference)findPreference(
344                             FileManagerSettings.SETTINGS_SAVE_SEARCH_TERMS.getId());
345             this.mSaveSearchTerms.setOnPreferenceChangeListener(this.mOnChangeListener);
346
347             // Remove search terms
348             this.mRemoveSearchTerms = findPreference(REMOVE_SEARCH_TERMS_KEY);
349             this.mRemoveSearchTerms.setOnPreferenceClickListener(this.mOnClickListener);
350
351             // Loaded
352             this.mLoaded = true;
353         }
354
355         /**
356          * Method that removes the recent suggestions on search activity
357          * @hide
358          */
359         void clearRecentSearchTerms() {
360             SearchRecentSuggestions suggestions =
361                     new SearchRecentSuggestions(getActivity(),
362                             RecentSearchesContentProvider.AUTHORITY,
363                             RecentSearchesContentProvider.MODE);
364             suggestions.clearHistory();
365             Preferences.setLastSearch(null);
366         }
367     }
368
369 }