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.app.Activity;
21 import android.content.Intent;
22 import android.os.Bundle;
23 import android.preference.CheckBoxPreference;
24 import android.preference.ListPreference;
25 import android.preference.Preference;
26 import android.preference.Preference.OnPreferenceChangeListener;
27 import android.preference.Preference.OnPreferenceClickListener;
28 import android.preference.PreferenceActivity;
29 import android.preference.PreferenceFragment;
30 import android.provider.SearchRecentSuggestions;
31 import android.util.Log;
32 import android.view.MenuItem;
33 import android.view.View;
34 import android.widget.TextView;
35 import android.widget.Toast;
37 import com.cyanogenmod.filemanager.FileManagerApplication;
38 import com.cyanogenmod.filemanager.R;
39 import com.cyanogenmod.filemanager.console.ConsoleBuilder;
40 import com.cyanogenmod.filemanager.preferences.AccessMode;
41 import com.cyanogenmod.filemanager.preferences.FileManagerSettings;
42 import com.cyanogenmod.filemanager.preferences.ObjectStringIdentifier;
43 import com.cyanogenmod.filemanager.preferences.Preferences;
44 import com.cyanogenmod.filemanager.providers.RecentSearchesContentProvider;
45 import com.cyanogenmod.filemanager.util.DialogHelper;
47 import java.util.List;
50 * The {@link SettingsPreferences} preferences
52 public class SettingsPreferences extends PreferenceActivity {
54 private static final boolean DEBUG = false;
56 private static final String LOG_TAG = "SettingsPreferences"; //$NON-NLS-1$
62 protected void onCreate(Bundle savedInstanceState) {
63 super.onCreate(savedInstanceState);
65 //Initialize action bars
70 * Method that initializes the titlebar of the activity.
72 private void initTitleActionBar() {
73 //Configure the action bar options
74 getActionBar().setBackgroundDrawable(
75 getResources().getDrawable(R.drawable.bg_holo_titlebar));
76 getActionBar().setDisplayOptions(
77 ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME);
78 getActionBar().setDisplayHomeAsUpEnabled(true);
79 View customTitle = getLayoutInflater().inflate(R.layout.simple_customtitle, null, false);
80 TextView title = (TextView)customTitle.findViewById(R.id.customtitle_title);
81 title.setText(R.string.pref);
82 title.setContentDescription(getString(R.string.pref));
83 getActionBar().setCustomView(customTitle);
90 public void onBuildHeaders(List<Header> target) {
91 loadHeadersFromResource(R.xml.preferences_headers, target);
93 // Retrieve the about header
94 Header aboutHeader = target.get(target.size()-1);
97 this.getPackageManager().getPackageInfo(this.getPackageName(), 0).versionName;
98 aboutHeader.summary = getString(R.string.pref_about_summary, appver);
99 } catch (Exception e) {
100 aboutHeader.summary = getString(R.string.pref_about_summary, ""); //$NON-NLS-1$
108 public boolean onOptionsItemSelected(MenuItem item) {
109 switch (item.getItemId()) {
110 case android.R.id.home:
114 return super.onOptionsItemSelected(item);
119 * A class that manages the commons options of the application
121 public static class GeneralPreferenceFragment extends PreferenceFragment {
123 private CheckBoxPreference mCaseSensitiveSort;
124 private ListPreference mFreeDiskSpaceWarningLevel;
125 private CheckBoxPreference mComputeFolderStatistics;
126 private ListPreference mAccessMode;
127 private CheckBoxPreference mDebugTraces;
132 boolean mLoaded = false;
134 private final OnPreferenceChangeListener mOnChangeListener =
135 new OnPreferenceChangeListener() {
137 public boolean onPreferenceChange(final Preference preference, Object newValue) {
140 String key = preference.getKey();
143 String.format("New value for %s: %s", //$NON-NLS-1$
145 String.valueOf(newValue)));
148 // Disk usage warning level
149 if (FileManagerSettings.SETTINGS_DISK_USAGE_WARNING_LEVEL.
150 getId().compareTo(key) == 0) {
151 String value = (String)newValue;
152 preference.setSummary(
153 getResources().getString(
154 R.string.pref_disk_usage_warning_level_summary, value));
158 else if (FileManagerSettings.SETTINGS_ACCESS_MODE.getId().compareTo(key) == 0) {
159 Activity activity = GeneralPreferenceFragment.this.getActivity();
161 String value = (String)newValue;
162 AccessMode oldMode = FileManagerApplication.getAccessMode();
163 AccessMode newMode = AccessMode.fromId(value);
164 if (oldMode.compareTo(newMode) != 0) {
165 // The mode was changes. Change the console
166 if (newMode.compareTo(AccessMode.ROOT) == 0) {
167 if (!ConsoleBuilder.changeToPrivilegedConsole(
168 activity.getApplicationContext())) {
169 value = String.valueOf(oldMode.ordinal());
173 if (!ConsoleBuilder.changeToNonPrivilegedConsole(
174 activity.getApplicationContext())) {
175 value = String.valueOf(oldMode.ordinal());
181 int valueId = Integer.valueOf(value).intValue();
182 String[] summary = getResources().getStringArray(
183 R.array.access_mode_summaries);
184 preference.setSummary(summary[valueId]);
187 // Notify the change (only if fragment is loaded. Default values are loaded
188 // while not in loaded mode)
189 if (GeneralPreferenceFragment.this.mLoaded && ret) {
190 Intent intent = new Intent(FileManagerSettings.INTENT_SETTING_CHANGED);
192 FileManagerSettings.EXTRA_SETTING_CHANGED_KEY, preference.getKey());
193 getActivity().sendBroadcast(intent);
204 public void onCreate(Bundle savedInstanceState) {
205 super.onCreate(savedInstanceState);
207 // Change the preference manager
208 getPreferenceManager().setSharedPreferencesName(Preferences.SETTINGS_FILENAME);
209 getPreferenceManager().setSharedPreferencesMode(MODE_PRIVATE);
211 // Add the preferences
212 addPreferencesFromResource(R.xml.preferences_general);
214 // Case sensitive sort
215 this.mCaseSensitiveSort =
216 (CheckBoxPreference)findPreference(
217 FileManagerSettings.SETTINGS_CASE_SENSITIVE_SORT.getId());
218 this.mCaseSensitiveSort.setOnPreferenceChangeListener(this.mOnChangeListener);
220 //Disk usage warning level
221 this.mFreeDiskSpaceWarningLevel =
222 (ListPreference)findPreference(
223 FileManagerSettings.SETTINGS_DISK_USAGE_WARNING_LEVEL.getId());
224 this.mFreeDiskSpaceWarningLevel.setOnPreferenceChangeListener(this.mOnChangeListener);
225 String defaultValue = ((String)FileManagerSettings.
226 SETTINGS_DISK_USAGE_WARNING_LEVEL.getDefaultValue());
227 String value = Preferences.getSharedPreferences().getString(
228 FileManagerSettings.SETTINGS_DISK_USAGE_WARNING_LEVEL.getId(),
230 this.mOnChangeListener.onPreferenceChange(this.mFreeDiskSpaceWarningLevel, value);
232 // Compute folder statistics
233 this.mComputeFolderStatistics =
234 (CheckBoxPreference)findPreference(
235 FileManagerSettings.SETTINGS_COMPUTE_FOLDER_STATISTICS.getId());
236 this.mComputeFolderStatistics.setOnPreferenceChangeListener(this.mOnChangeListener);
240 (ListPreference)findPreference(
241 FileManagerSettings.SETTINGS_ACCESS_MODE.getId());
242 this.mAccessMode.setOnPreferenceChangeListener(this.mOnChangeListener);
243 defaultValue = ((ObjectStringIdentifier)FileManagerSettings.
244 SETTINGS_ACCESS_MODE.getDefaultValue()).getId();
245 value = Preferences.getSharedPreferences().getString(
246 FileManagerSettings.SETTINGS_ACCESS_MODE.getId(),
248 this.mOnChangeListener.onPreferenceChange(this.mAccessMode, value);
250 // Capture Debug traces
252 (CheckBoxPreference)findPreference(
253 FileManagerSettings.SETTINGS_SHOW_TRACES.getId());
254 this.mDebugTraces.setOnPreferenceChangeListener(this.mOnChangeListener);
262 * A class that manages the search options
264 public static class SearchPreferenceFragment extends PreferenceFragment {
267 private static final String REMOVE_SEARCH_TERMS_KEY =
268 "cm_filemanager_remove_saved_search_terms"; //$NON-NLS-1$
270 private CheckBoxPreference mHighlightTerms;
271 private CheckBoxPreference mShowRelevanceWidget;
272 private ListPreference mSortSearchResultMode;
273 private CheckBoxPreference mSaveSearchTerms;
274 private Preference mRemoveSearchTerms;
279 boolean mLoaded = false;
281 private final OnPreferenceChangeListener mOnChangeListener =
282 new OnPreferenceChangeListener() {
284 public boolean onPreferenceChange(Preference preference, Object newValue) {
285 String key = preference.getKey();
288 String.format("New value for %s: %s", //$NON-NLS-1$
290 String.valueOf(newValue)));
293 // Saved search terms
294 if (preference.getKey().compareTo(
295 FileManagerSettings.SETTINGS_SAVE_SEARCH_TERMS.getId()) == 0) {
296 if (!((Boolean)newValue).booleanValue()) {
297 // Remove search terms if saved search terms
298 // is not active by the user
299 clearRecentSearchTerms();
302 // Sort search result mode
303 } else if (FileManagerSettings.SETTINGS_SORT_SEARCH_RESULTS_MODE.
304 getId().compareTo(key) == 0) {
305 int value = Integer.valueOf((String)newValue).intValue();
306 String[] summary = getResources().getStringArray(
307 R.array.sort_search_results_mode_labels);
308 preference.setSummary(summary[value]);
311 // Notify the change (only if fragment is loaded. Default values are loaded
312 // while not in loaded mode)
313 if (SearchPreferenceFragment.this.mLoaded) {
314 Intent intent = new Intent(FileManagerSettings.INTENT_SETTING_CHANGED);
316 FileManagerSettings.EXTRA_SETTING_CHANGED_KEY, preference.getKey());
317 getActivity().sendBroadcast(intent);
324 private final OnPreferenceClickListener mOnClickListener =
325 new Preference.OnPreferenceClickListener() {
327 public boolean onPreferenceClick(Preference preference) {
328 if (preference.getKey().compareTo(REMOVE_SEARCH_TERMS_KEY) == 0) {
329 // Remove search terms
330 clearRecentSearchTerms();
333 DialogHelper.showToast(
335 getActivity().getString(R.string.pref_remove_saved_search_terms_msg),
346 public void onCreate(Bundle savedInstanceState) {
347 super.onCreate(savedInstanceState);
349 // Change the preference manager
350 getPreferenceManager().setSharedPreferencesName(Preferences.SETTINGS_FILENAME);
351 getPreferenceManager().setSharedPreferencesMode(MODE_PRIVATE);
352 this.mLoaded = false;
354 // Add the preferences
355 addPreferencesFromResource(R.xml.preferences_search);
358 this.mHighlightTerms =
359 (CheckBoxPreference)findPreference(
360 FileManagerSettings.SETTINGS_HIGHLIGHT_TERMS.getId());
361 this.mHighlightTerms.setOnPreferenceChangeListener(this.mOnChangeListener);
364 this.mShowRelevanceWidget =
365 (CheckBoxPreference)findPreference(
366 FileManagerSettings.SETTINGS_SHOW_RELEVANCE_WIDGET.getId());
367 this.mShowRelevanceWidget.setOnPreferenceChangeListener(this.mOnChangeListener);
369 // Sort search result mode
370 this.mSortSearchResultMode =
371 (ListPreference)findPreference(
372 FileManagerSettings.SETTINGS_SORT_SEARCH_RESULTS_MODE.getId());
373 this.mSortSearchResultMode.setOnPreferenceChangeListener(this.mOnChangeListener);
374 String defaultValue = ((ObjectStringIdentifier)FileManagerSettings.
375 SETTINGS_SORT_SEARCH_RESULTS_MODE.getDefaultValue()).getId();
376 String value = Preferences.getSharedPreferences().getString(
377 FileManagerSettings.SETTINGS_SORT_SEARCH_RESULTS_MODE.getId(),
379 this.mOnChangeListener.onPreferenceChange(this.mSortSearchResultMode, value);
381 // Saved search terms
382 this.mSaveSearchTerms =
383 (CheckBoxPreference)findPreference(
384 FileManagerSettings.SETTINGS_SAVE_SEARCH_TERMS.getId());
385 this.mSaveSearchTerms.setOnPreferenceChangeListener(this.mOnChangeListener);
387 // Remove search terms
388 this.mRemoveSearchTerms = findPreference(REMOVE_SEARCH_TERMS_KEY);
389 this.mRemoveSearchTerms.setOnPreferenceClickListener(this.mOnClickListener);
396 * Method that removes the recent suggestions on search activity
399 void clearRecentSearchTerms() {
400 SearchRecentSuggestions suggestions =
401 new SearchRecentSuggestions(getActivity(),
402 RecentSearchesContentProvider.AUTHORITY,
403 RecentSearchesContentProvider.MODE);
404 suggestions.clearHistory();
405 Preferences.setLastSearch(null);