2 * Copyright (C) 2012 The CyanogenMod Project
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package com.cyanogenmod.filemanager.activities.preferences;
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;
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;
44 import java.util.List;
47 * The {@link SettingsPreferences} preferences
49 public class SettingsPreferences extends PreferenceActivity {
51 private static final boolean DEBUG = false;
53 private static final String LOG_TAG = "SettingsPreferences"; //$NON-NLS-1$
59 protected void onCreate(Bundle savedInstanceState) {
60 super.onCreate(savedInstanceState);
62 //Initialize action bars
67 * Method that initializes the titlebar of the activity.
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);
87 public void onBuildHeaders(List<Header> target) {
88 loadHeadersFromResource(R.xml.preferences_headers, target);
90 // Retrieve the about header
91 Header aboutHeader = target.get(target.size()-1);
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$
105 public boolean onOptionsItemSelected(MenuItem item) {
106 switch (item.getItemId()) {
107 case android.R.id.home:
111 return super.onOptionsItemSelected(item);
116 * A class that manages the commons options of the application
118 public static class GeneralPreferenceFragment extends PreferenceFragment {
120 private CheckBoxPreference mCaseSensitiveSort;
121 private ListPreference mDefaultLongClickAction;
122 private ListPreference mFreeDiskSpaceWarningLevel;
123 private CheckBoxPreference mComputeFolderStatistics;
124 private CheckBoxPreference mAdvancedSettings;
125 private CheckBoxPreference mDebugTraces;
130 boolean mLoaded = false;
132 private final OnPreferenceChangeListener mOnChangeListener =
133 new OnPreferenceChangeListener() {
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$
140 String.valueOf(newValue)));
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]);
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));
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);
165 FileManagerSettings.EXTRA_SETTING_CHANGED_KEY, preference.getKey());
166 getActivity().sendBroadcast(intent);
177 public void onCreate(Bundle savedInstanceState) {
178 super.onCreate(savedInstanceState);
180 // Change the preference manager
181 getPreferenceManager().setSharedPreferencesName(Preferences.SETTINGS_FILENAME);
182 getPreferenceManager().setSharedPreferencesMode(MODE_PRIVATE);
184 // Add the preferences
185 addPreferencesFromResource(R.xml.preferences_general);
187 // Case sensitive sort
188 this.mCaseSensitiveSort =
189 (CheckBoxPreference)findPreference(
190 FileManagerSettings.SETTINGS_CASE_SENSITIVE_SORT.getId());
191 this.mCaseSensitiveSort.setOnPreferenceChangeListener(this.mOnChangeListener);
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(),
203 this.mOnChangeListener.onPreferenceChange(this.mDefaultLongClickAction, value);
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(),
215 this.mOnChangeListener.onPreferenceChange(this.mFreeDiskSpaceWarningLevel, value);
217 // Compute folder statistics
218 this.mComputeFolderStatistics =
219 (CheckBoxPreference)findPreference(
220 FileManagerSettings.SETTINGS_COMPUTE_FOLDER_STATISTICS.getId());
221 this.mComputeFolderStatistics.setOnPreferenceChangeListener(this.mOnChangeListener);
224 this.mAdvancedSettings =
225 (CheckBoxPreference)findPreference(
226 FileManagerSettings.SETTINGS_ADVANCE_MODE.getId());
227 if (FileManagerApplication.isDeviceRooted()) {
228 this.mAdvancedSettings.setOnPreferenceChangeListener(this.mOnChangeListener);
230 // Disable the advanced mode
231 this.mAdvancedSettings.setEnabled(false);
234 // Capture Debug traces
236 (CheckBoxPreference)findPreference(
237 FileManagerSettings.SETTINGS_SHOW_TRACES.getId());
238 this.mDebugTraces.setOnPreferenceChangeListener(this.mOnChangeListener);
246 * A class that manages the search options
248 public static class SearchPreferenceFragment extends PreferenceFragment {
251 private static final String REMOVE_SEARCH_TERMS_KEY =
252 "cm_filemanager_remove_saved_search_terms"; //$NON-NLS-1$
254 private CheckBoxPreference mHighlightTerms;
255 private CheckBoxPreference mShowRelevanceWidget;
256 private ListPreference mSortSearchResultMode;
257 private CheckBoxPreference mSaveSearchTerms;
258 private Preference mRemoveSearchTerms;
263 boolean mLoaded = false;
265 private final OnPreferenceChangeListener mOnChangeListener =
266 new OnPreferenceChangeListener() {
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$
273 String.valueOf(newValue)));
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();
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]);
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);
298 FileManagerSettings.EXTRA_SETTING_CHANGED_KEY, preference.getKey());
299 getActivity().sendBroadcast(intent);
306 private final OnPreferenceClickListener mOnClickListener =
307 new Preference.OnPreferenceClickListener() {
309 public boolean onPreferenceClick(Preference preference) {
310 if (preference.getKey().compareTo(REMOVE_SEARCH_TERMS_KEY) == 0) {
311 // Remove search terms
312 clearRecentSearchTerms();
315 DialogHelper.showToast(
317 getActivity().getString(R.string.pref_remove_saved_search_terms_msg),
328 public void onCreate(Bundle savedInstanceState) {
329 super.onCreate(savedInstanceState);
331 // Change the preference manager
332 getPreferenceManager().setSharedPreferencesName(Preferences.SETTINGS_FILENAME);
333 getPreferenceManager().setSharedPreferencesMode(MODE_PRIVATE);
334 this.mLoaded = false;
336 // Add the preferences
337 addPreferencesFromResource(R.xml.preferences_search);
340 this.mHighlightTerms =
341 (CheckBoxPreference)findPreference(
342 FileManagerSettings.SETTINGS_HIGHLIGHT_TERMS.getId());
343 this.mHighlightTerms.setOnPreferenceChangeListener(this.mOnChangeListener);
346 this.mShowRelevanceWidget =
347 (CheckBoxPreference)findPreference(
348 FileManagerSettings.SETTINGS_SHOW_RELEVANCE_WIDGET.getId());
349 this.mShowRelevanceWidget.setOnPreferenceChangeListener(this.mOnChangeListener);
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(),
361 this.mOnChangeListener.onPreferenceChange(this.mSortSearchResultMode, value);
363 // Saved search terms
364 this.mSaveSearchTerms =
365 (CheckBoxPreference)findPreference(
366 FileManagerSettings.SETTINGS_SAVE_SEARCH_TERMS.getId());
367 this.mSaveSearchTerms.setOnPreferenceChangeListener(this.mOnChangeListener);
369 // Remove search terms
370 this.mRemoveSearchTerms = findPreference(REMOVE_SEARCH_TERMS_KEY);
371 this.mRemoveSearchTerms.setOnPreferenceClickListener(this.mOnClickListener);
378 * Method that removes the recent suggestions on search activity
381 void clearRecentSearchTerms() {
382 SearchRecentSuggestions suggestions =
383 new SearchRecentSuggestions(getActivity(),
384 RecentSearchesContentProvider.AUTHORITY,
385 RecentSearchesContentProvider.MODE);
386 suggestions.clearHistory();
387 Preferences.setLastSearch(null);