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 mFreeDiskSpaceWarningLevel;
122 private CheckBoxPreference mComputeFolderStatistics;
123 private CheckBoxPreference mAdvancedSettings;
124 private CheckBoxPreference mDebugTraces;
129 boolean mLoaded = false;
131 private final OnPreferenceChangeListener mOnChangeListener =
132 new OnPreferenceChangeListener() {
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$
139 String.valueOf(newValue)));
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));
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);
155 FileManagerSettings.EXTRA_SETTING_CHANGED_KEY, preference.getKey());
156 getActivity().sendBroadcast(intent);
167 public void onCreate(Bundle savedInstanceState) {
168 super.onCreate(savedInstanceState);
170 // Change the preference manager
171 getPreferenceManager().setSharedPreferencesName(Preferences.SETTINGS_FILENAME);
172 getPreferenceManager().setSharedPreferencesMode(MODE_PRIVATE);
174 // Add the preferences
175 addPreferencesFromResource(R.xml.preferences_general);
177 // Case sensitive sort
178 this.mCaseSensitiveSort =
179 (CheckBoxPreference)findPreference(
180 FileManagerSettings.SETTINGS_CASE_SENSITIVE_SORT.getId());
181 this.mCaseSensitiveSort.setOnPreferenceChangeListener(this.mOnChangeListener);
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(),
193 this.mOnChangeListener.onPreferenceChange(this.mFreeDiskSpaceWarningLevel, value);
195 // Compute folder statistics
196 this.mComputeFolderStatistics =
197 (CheckBoxPreference)findPreference(
198 FileManagerSettings.SETTINGS_COMPUTE_FOLDER_STATISTICS.getId());
199 this.mComputeFolderStatistics.setOnPreferenceChangeListener(this.mOnChangeListener);
202 this.mAdvancedSettings =
203 (CheckBoxPreference)findPreference(
204 FileManagerSettings.SETTINGS_ADVANCE_MODE.getId());
205 if (FileManagerApplication.isDeviceRooted()) {
206 this.mAdvancedSettings.setOnPreferenceChangeListener(this.mOnChangeListener);
208 // Disable the advanced mode
209 this.mAdvancedSettings.setEnabled(false);
212 // Capture Debug traces
214 (CheckBoxPreference)findPreference(
215 FileManagerSettings.SETTINGS_SHOW_TRACES.getId());
216 this.mDebugTraces.setOnPreferenceChangeListener(this.mOnChangeListener);
224 * A class that manages the search options
226 public static class SearchPreferenceFragment extends PreferenceFragment {
229 private static final String REMOVE_SEARCH_TERMS_KEY =
230 "cm_filemanager_remove_saved_search_terms"; //$NON-NLS-1$
232 private CheckBoxPreference mHighlightTerms;
233 private CheckBoxPreference mShowRelevanceWidget;
234 private ListPreference mSortSearchResultMode;
235 private CheckBoxPreference mSaveSearchTerms;
236 private Preference mRemoveSearchTerms;
241 boolean mLoaded = false;
243 private final OnPreferenceChangeListener mOnChangeListener =
244 new OnPreferenceChangeListener() {
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$
251 String.valueOf(newValue)));
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();
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]);
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);
276 FileManagerSettings.EXTRA_SETTING_CHANGED_KEY, preference.getKey());
277 getActivity().sendBroadcast(intent);
284 private final OnPreferenceClickListener mOnClickListener =
285 new Preference.OnPreferenceClickListener() {
287 public boolean onPreferenceClick(Preference preference) {
288 if (preference.getKey().compareTo(REMOVE_SEARCH_TERMS_KEY) == 0) {
289 // Remove search terms
290 clearRecentSearchTerms();
293 DialogHelper.showToast(
295 getActivity().getString(R.string.pref_remove_saved_search_terms_msg),
306 public void onCreate(Bundle savedInstanceState) {
307 super.onCreate(savedInstanceState);
309 // Change the preference manager
310 getPreferenceManager().setSharedPreferencesName(Preferences.SETTINGS_FILENAME);
311 getPreferenceManager().setSharedPreferencesMode(MODE_PRIVATE);
312 this.mLoaded = false;
314 // Add the preferences
315 addPreferencesFromResource(R.xml.preferences_search);
318 this.mHighlightTerms =
319 (CheckBoxPreference)findPreference(
320 FileManagerSettings.SETTINGS_HIGHLIGHT_TERMS.getId());
321 this.mHighlightTerms.setOnPreferenceChangeListener(this.mOnChangeListener);
324 this.mShowRelevanceWidget =
325 (CheckBoxPreference)findPreference(
326 FileManagerSettings.SETTINGS_SHOW_RELEVANCE_WIDGET.getId());
327 this.mShowRelevanceWidget.setOnPreferenceChangeListener(this.mOnChangeListener);
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(),
339 this.mOnChangeListener.onPreferenceChange(this.mSortSearchResultMode, value);
341 // Saved search terms
342 this.mSaveSearchTerms =
343 (CheckBoxPreference)findPreference(
344 FileManagerSettings.SETTINGS_SAVE_SEARCH_TERMS.getId());
345 this.mSaveSearchTerms.setOnPreferenceChangeListener(this.mOnChangeListener);
347 // Remove search terms
348 this.mRemoveSearchTerms = findPreference(REMOVE_SEARCH_TERMS_KEY);
349 this.mRemoveSearchTerms.setOnPreferenceClickListener(this.mOnClickListener);
356 * Method that removes the recent suggestions on search activity
359 void clearRecentSearchTerms() {
360 SearchRecentSuggestions suggestions =
361 new SearchRecentSuggestions(getActivity(),
362 RecentSearchesContentProvider.AUTHORITY,
363 RecentSearchesContentProvider.MODE);
364 suggestions.clearHistory();
365 Preferences.setLastSearch(null);