--- /dev/null
+/*
+ * Copyright (C) 2008 OpenIntents.org
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.openintents.filemanager;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.ContentUris;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.preference.ListPreference;
+import android.preference.Preference;
+import android.preference.Preference.OnPreferenceClickListener;
+import android.preference.PreferenceManager;
+import android.widget.Toast;
+
+public class PreferenceActivity extends android.preference.PreferenceActivity
+ implements OnSharedPreferenceChangeListener {
+
+ public static final String PREFS_MEDIASCAN = "mediascan";
+ /**
+ * @since 2011-09-30
+ */
+ public static final String PREFS_SHOWALLWARNING = "showallwarning";
+
+
+ public static final String PREFS_DISPLAYHIDDENFILES = "displayhiddenfiles";
+
+ public static final String PREFS_SORTBY = "sortby";
+
+ public static final String PREFS_ASCENDING = "ascending";
+
+ public static final String PREFS_DEFAULTPICKFILEPATH = "defaultpickfilepath";
+
+ private static final int DIALOG_DELETE_BOOKMARKS = 1;
+
+ private Cursor deleteBookmarksCursor;
+ private List<Uri> bookmarksToDelete = new LinkedList<Uri>();
+
+ @Override
+ protected void onCreate(Bundle icicle) {
+
+ super.onCreate(icicle);
+
+ addPreferencesFromResource(R.xml.preferences);
+
+ Preference editBookmarks = findPreference("editbookmarks");
+ editBookmarks.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ public boolean onPreferenceClick(Preference pref){
+ showDialog(DIALOG_DELETE_BOOKMARKS);
+ return false;
+ }
+ });
+
+ /* Register the onSharedPreferenceChanged listener to update the SortBy ListPreference summary */
+ getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
+ /* Set the onSharedPreferenceChanged listener summary to its initial value */
+ changeListPreferenceSummaryToCurrentValue((ListPreference)findPreference("sortby"));
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ }
+
+ static boolean getMediaScanFromPreference(Context context) {
+ return PreferenceManager.getDefaultSharedPreferences(context)
+ .getBoolean(PREFS_MEDIASCAN, false);
+ }
+
+ /**
+ * @since 2011-09-30
+ */
+ static void setShowAllWarning(Context context, boolean enabled) {
+ SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
+ SharedPreferences.Editor editor = settings.edit();
+ editor.putBoolean(PREFS_SHOWALLWARNING, enabled);
+ editor.commit();
+ }
+
+ /**
+ * @since 2011-09-30
+ */
+ static boolean getShowAllWarning(Context context) {
+ return PreferenceManager.getDefaultSharedPreferences(context)
+ .getBoolean(PREFS_SHOWALLWARNING, true);
+ }
+
+
+
+ static void setDisplayHiddenFiles(Context context, boolean enabled) {
+ SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
+ SharedPreferences.Editor editor = settings.edit();
+ editor.putBoolean(PREFS_DISPLAYHIDDENFILES, enabled);
+ editor.commit();
+ }
+
+
+ static boolean getDisplayHiddenFiles(Context context) {
+ return PreferenceManager.getDefaultSharedPreferences(context)
+ .getBoolean(PREFS_DISPLAYHIDDENFILES, true);
+ }
+
+ static void setDefaultPickFilePath(Context context, String path) {
+ SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
+ SharedPreferences.Editor editor = settings.edit();
+ editor.putString(PREFS_DEFAULTPICKFILEPATH, path);
+ editor.commit();
+ }
+
+
+ static String getDefaultPickFilePath(Context context) {
+ return PreferenceManager.getDefaultSharedPreferences(context)
+ .getString(PREFS_DEFAULTPICKFILEPATH, null);
+ }
+
+
+ @Override
+ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
+ if(key.equals("sortby")){
+ changeListPreferenceSummaryToCurrentValue((ListPreference)findPreference(key));
+ }
+ }
+
+ private void changeListPreferenceSummaryToCurrentValue(ListPreference listPref){
+ listPref.setSummary(listPref.getEntry());
+ }
+
+
+ static int getSortBy(Context context) {
+ /* entryValues must be a string-array while we need integers */
+ return Integer.parseInt(PreferenceManager.getDefaultSharedPreferences(context)
+ .getString(PREFS_SORTBY, "1"));
+ }
+
+ static boolean getAscending(Context context) {
+ return PreferenceManager.getDefaultSharedPreferences(context)
+ .getBoolean(PREFS_ASCENDING, true);
+ }
+
+ @Override
+ protected Dialog onCreateDialog(int id) {
+ switch (id) {
+ case DIALOG_DELETE_BOOKMARKS:
+ deleteBookmarksCursor = getBookmarksCursor();
+ AlertDialog dialog =
+ new AlertDialog.Builder(this)
+ .setTitle(R.string.bookmarks_select_to_delete)
+ .setMultiChoiceItems(deleteBookmarksCursor,
+ BookmarksProvider.CHECKED, BookmarksProvider.NAME,
+ new DialogInterface.OnMultiChoiceClickListener() {
+ public void onClick(DialogInterface dialog, int item, boolean checked) {
+ if (deleteBookmarksCursor.moveToPosition(item)) {
+ Uri deleteUri = ContentUris.withAppendedId(
+ BookmarksProvider.CONTENT_URI,
+ deleteBookmarksCursor.getInt(
+ deleteBookmarksCursor.getColumnIndex(
+ BookmarksProvider._ID)));
+ if(checked)
+ bookmarksToDelete.add(deleteUri);
+ else
+ bookmarksToDelete.remove(deleteUri);
+
+
+ ((AlertDialog)dialog).getButton(AlertDialog.BUTTON_POSITIVE)
+ .setEnabled((bookmarksToDelete.size() > 0) ? true : false);
+
+ ContentValues checkedValues = new ContentValues();
+ checkedValues.put(BookmarksProvider.CHECKED, checked ? 1 : 0);
+ getContentResolver().update(deleteUri, checkedValues, null, null);
+ //Have to use the deprecated requery()
+ //(see http://code.google.com/p/android/issues/detail?id=2998)
+ deleteBookmarksCursor.requery();
+ }
+ ((AlertDialog)dialog).getListView().invalidate();
+ }
+ })
+ .setPositiveButton(R.string.bookmarks_delete, new DialogInterface.OnClickListener() {
+
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ for(Uri uri : bookmarksToDelete){
+ getContentResolver().delete(uri, null, null);
+ }
+ Toast.makeText(PreferenceActivity.this,
+ R.string.bookmarks_deleted, Toast.LENGTH_SHORT).show();
+ restartBookmarksChecked();
+ }
+ })
+ .setNegativeButton(R.string.bookmarks_cancel, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int item) {
+ restartBookmarksChecked();
+ }
+ }).create();
+ // TODO: need to fix
+ /* Commenting this out for now. Need another way to do this or check for SDK > 7.
+ * With this in, Android 1.5 crashes upon launch.
+ dialog.setOnShowListener(new DialogInterface.OnShowListener() {
+ @Override
+ public void onShow(DialogInterface dialog) {
+ ((AlertDialog)dialog).getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
+ }
+ });*/
+ return dialog;
+ }
+ return super.onCreateDialog(id);
+ }
+
+ private void restartBookmarksChecked(){
+ ContentValues checkedValues = new ContentValues();
+ checkedValues.put(BookmarksProvider.CHECKED, 0);
+ getContentResolver().update(BookmarksProvider.CONTENT_URI, checkedValues, null, null);
+ deleteBookmarksCursor.requery();
+ bookmarksToDelete.clear();
+ }
+
+ private Cursor getBookmarksCursor(){
+ return managedQuery(BookmarksProvider.CONTENT_URI,
+ new String[] {
+ BookmarksProvider._ID,
+ BookmarksProvider.NAME,
+ BookmarksProvider.PATH,
+ BookmarksProvider.CHECKED
+ }, null, null, null);
+ }
+}