aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJorge Ruesga <jorge@ruesga.com>2013-04-19 22:03:27 +0200
committerJorge Ruesga <jorge@ruesga.com>2013-04-19 23:08:46 +0200
commit31112c74dfbc913c549d75b3a5eb5f854423950b (patch)
tree123cea58206a9139e1048850b685413a96bbc80d
parent661616e72f02ba3caa21cea3c347b6e9750811b3 (diff)
downloadandroid_packages_apps_CMFileManager-31112c74dfbc913c549d75b3a5eb5f854423950b.tar.gz
android_packages_apps_CMFileManager-31112c74dfbc913c549d75b3a5eb5f854423950b.tar.bz2
android_packages_apps_CMFileManager-31112c74dfbc913c549d75b3a5eb5f854423950b.zip
CMFM: User-defined date/time format
Allow the user to select the date/time format to use. JIRA: CYAN-863 Issue: https://jira.cyanogenmod.org/browse/CYAN-863 Change-Id: I13730e8c82e5de96645c9c70f244535eb449e261 Signed-off-by: Jorge Ruesga <jorge@ruesga.com>
-rw-r--r--res/values/arrays.xml16
-rw-r--r--res/values/strings.xml12
-rw-r--r--res/xml/preferences_general.xml9
-rw-r--r--src/com/cyanogenmod/filemanager/activities/NavigationActivity.java23
-rw-r--r--src/com/cyanogenmod/filemanager/activities/preferences/GeneralPreferenceFragment.java33
-rw-r--r--src/com/cyanogenmod/filemanager/adapters/FileSystemObjectAdapter.java6
-rw-r--r--src/com/cyanogenmod/filemanager/preferences/FileManagerSettings.java6
-rw-r--r--src/com/cyanogenmod/filemanager/preferences/FileTimeFormatMode.java94
-rw-r--r--src/com/cyanogenmod/filemanager/ui/dialogs/FsoPropertiesDialog.java24
-rw-r--r--src/com/cyanogenmod/filemanager/util/FileHelper.java61
10 files changed, 259 insertions, 25 deletions
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 585b176b..3dd4823c 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -31,6 +31,22 @@
<item>@string/layout_details</item>
</string-array>
+ <!-- General. Filetime format mode -->
+ <string-array name="filetime_format_mode_labels" translatable="false">
+ <item>@string/filetime_format_mode_system</item>
+ <item>@string/filetime_format_mode_locale</item>
+ <item>@string/filetime_format_mode_ddMMyyyy_HHmmss</item>
+ <item>@string/filetime_format_mode_MMddyyyy_HHmmss</item>
+ <item>@string/filetime_format_mode_yyyyMMdd_HHmmss</item>
+ </string-array>
+ <string-array name="filetime_format_mode_values" translatable="false">
+ <item>0</item>
+ <item>1</item>
+ <item>2</item>
+ <item>3</item>
+ <item>4</item>
+ </string-array>
+
<!-- General. Disk usage warning level -->
<string-array name="disk_usage_warning_level_labels" translatable="false">
<item>75%</item>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index c8566788..5785312e 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -28,6 +28,9 @@
<string name="size_megabytes" translatable="false">MB</string>
<string name="size_gigabytes" translatable="false">GB</string>
+ <!-- Date/time format order (%1$s: date; %2$s: time) -->
+ <string name="datetime_format_order">%1$s %2$s</string>
+
<!-- Devices types -->
<string name="device_blockdevice">Block device</string>
<string name="device_characterdevice">Character device</string>
@@ -602,6 +605,13 @@
<!-- Mime/Types * Unknown -->
<string name="mime_unknown">Unknown</string>
+ <!-- Filetime formats -->
+ <string name="filetime_format_mode_system">System-defined</string>
+ <string name="filetime_format_mode_locale">Locale-defined</string>
+ <string name="filetime_format_mode_ddMMyyyy_HHmmss">dd/mm/yyyy hh:mm:ss</string>
+ <string name="filetime_format_mode_MMddyyyy_HHmmss">mm/dd/yyyy hh:mm:ss</string>
+ <string name="filetime_format_mode_yyyyMMdd_HHmmss">yyyy-mm-dd hh:mm:ss</string>
+
<!-- Selection. All possibilities. [1 folder; >1 folders; 1 file; >1 files;
>1 folders and 1 file; 1 folder and >1 files; >1 folders and >1 files]
Avoid using plural item because is more complex to achieved all strings -->
@@ -673,6 +683,8 @@
<string name="pref_case_sensitive_sort">Case-sensitive</string>
<!-- Preferences * General * Case sensitive sort and navigating summary -->
<string name="pref_case_sensitive_sort_summary">Consider case when navigating or sorting search results</string>
+ <!-- Preferences * General * Filetime format mode title -->
+ <string name="pref_filetime_format_mode">Date/time format</string>
<!-- Preferences * General *Disk usage warning level title -->
<string name="pref_disk_usage_warning_level">Disk usage warning</string>
<!-- Preferences * General * Disk usage warning level summary -->
diff --git a/res/xml/preferences_general.xml b/res/xml/preferences_general.xml
index 121b231c..6c2c884c 100644
--- a/res/xml/preferences_general.xml
+++ b/res/xml/preferences_general.xml
@@ -30,6 +30,15 @@
android:persistent="true"
android:defaultValue="false" />
+ <!-- Filetime format -->
+ <ListPreference
+ android:key="cm_filemanager_filetime_format_mode"
+ android:title="@string/pref_filetime_format_mode"
+ android:entries="@array/filetime_format_mode_labels"
+ android:entryValues="@array/filetime_format_mode_values"
+ android:defaultValue="1"
+ android:persistent="true" />
+
<!-- Disk usage warning level -->
<ListPreference
android:key="cm_filemanager_disk_usage_warning_level"
diff --git a/src/com/cyanogenmod/filemanager/activities/NavigationActivity.java b/src/com/cyanogenmod/filemanager/activities/NavigationActivity.java
index 2f491df7..77effe18 100644
--- a/src/com/cyanogenmod/filemanager/activities/NavigationActivity.java
+++ b/src/com/cyanogenmod/filemanager/activities/NavigationActivity.java
@@ -235,6 +235,16 @@ public class NavigationActivity extends Activity
}
}
}
+
+ // Filetime format mode
+ if (key.compareTo(FileManagerSettings.
+ SETTINGS_FILETIME_FORMAT_MODE.getId()) == 0) {
+ // Refresh the data
+ synchronized (FileHelper.DATETIME_SYNC) {
+ FileHelper.sReloadDateTimeFormats = true;
+ NavigationActivity.this.getCurrentNavigationView().refresh();
+ }
+ }
}
} else if (intent.getAction().compareTo(
@@ -250,9 +260,19 @@ public class NavigationActivity extends Activity
} catch (Exception e) {
ExceptionUtil.translateException(context, e, true, false);
}
+
} else if (intent.getAction().compareTo(
FileManagerSettings.INTENT_THEME_CHANGED) == 0) {
applyTheme();
+
+ } else if (intent.getAction().compareTo(Intent.ACTION_TIME_CHANGED) == 0 ||
+ intent.getAction().compareTo(Intent.ACTION_DATE_CHANGED) == 0 ||
+ intent.getAction().compareTo(Intent.ACTION_TIMEZONE_CHANGED) == 0) {
+ // Refresh the data
+ synchronized (FileHelper.DATETIME_SYNC) {
+ FileHelper.sReloadDateTimeFormats = true;
+ NavigationActivity.this.getCurrentNavigationView().refresh();
+ }
}
}
}
@@ -301,6 +321,9 @@ public class NavigationActivity extends Activity
filter.addAction(FileManagerSettings.INTENT_SETTING_CHANGED);
filter.addAction(FileManagerSettings.INTENT_FILE_CHANGED);
filter.addAction(FileManagerSettings.INTENT_THEME_CHANGED);
+ filter.addAction(Intent.ACTION_DATE_CHANGED);
+ filter.addAction(Intent.ACTION_TIME_CHANGED);
+ filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
registerReceiver(this.mNotificationReceiver, filter);
//Set the main layout of the activity
diff --git a/src/com/cyanogenmod/filemanager/activities/preferences/GeneralPreferenceFragment.java b/src/com/cyanogenmod/filemanager/activities/preferences/GeneralPreferenceFragment.java
index 1e98105b..8d1385d9 100644
--- a/src/com/cyanogenmod/filemanager/activities/preferences/GeneralPreferenceFragment.java
+++ b/src/com/cyanogenmod/filemanager/activities/preferences/GeneralPreferenceFragment.java
@@ -44,6 +44,7 @@ public class GeneralPreferenceFragment extends TitlePreferenceFragment {
private static final boolean DEBUG = false;
private CheckBoxPreference mCaseSensitiveSort;
+ private ListPreference mFiletimeFormatMode;
private ListPreference mFreeDiskSpaceWarningLevel;
private CheckBoxPreference mComputeFolderStatistics;
// private CheckBoxPreference mUseFlinger;
@@ -69,8 +70,18 @@ public class GeneralPreferenceFragment extends TitlePreferenceFragment {
String.valueOf(newValue)));
}
+ // Filetime format mode
+ if (FileManagerSettings.SETTINGS_FILETIME_FORMAT_MODE.
+ getId().compareTo(key) == 0) {
+ String value = (String)newValue;
+ int valueId = Integer.valueOf(value).intValue();
+ String[] labels = getResources().getStringArray(
+ R.array.filetime_format_mode_labels);
+ preference.setSummary(labels[valueId]);
+ }
+
// Disk usage warning level
- if (FileManagerSettings.SETTINGS_DISK_USAGE_WARNING_LEVEL.
+ else if (FileManagerSettings.SETTINGS_DISK_USAGE_WARNING_LEVEL.
getId().compareTo(key) == 0) {
String value = (String)newValue;
preference.setSummary(
@@ -141,17 +152,29 @@ public class GeneralPreferenceFragment extends TitlePreferenceFragment {
FileManagerSettings.SETTINGS_CASE_SENSITIVE_SORT.getId());
this.mCaseSensitiveSort.setOnPreferenceChangeListener(this.mOnChangeListener);
- //Disk usage warning level
+ // Filetime format mode
+ this.mFiletimeFormatMode =
+ (ListPreference)findPreference(
+ FileManagerSettings.SETTINGS_FILETIME_FORMAT_MODE.getId());
+ String defaultValue = ((ObjectStringIdentifier)FileManagerSettings.
+ SETTINGS_FILETIME_FORMAT_MODE.getDefaultValue()).getId();
+ String value = Preferences.getSharedPreferences().getString(
+ FileManagerSettings.SETTINGS_FILETIME_FORMAT_MODE.getId(),
+ defaultValue);
+ this.mOnChangeListener.onPreferenceChange(this.mFiletimeFormatMode, value);
+ this.mFiletimeFormatMode.setOnPreferenceChangeListener(this.mOnChangeListener);
+
+ // Disk usage warning level
this.mFreeDiskSpaceWarningLevel =
(ListPreference)findPreference(
FileManagerSettings.SETTINGS_DISK_USAGE_WARNING_LEVEL.getId());
- this.mFreeDiskSpaceWarningLevel.setOnPreferenceChangeListener(this.mOnChangeListener);
- String defaultValue = ((String)FileManagerSettings.
+ defaultValue = ((String)FileManagerSettings.
SETTINGS_DISK_USAGE_WARNING_LEVEL.getDefaultValue());
- String value = Preferences.getSharedPreferences().getString(
+ value = Preferences.getSharedPreferences().getString(
FileManagerSettings.SETTINGS_DISK_USAGE_WARNING_LEVEL.getId(),
defaultValue);
this.mOnChangeListener.onPreferenceChange(this.mFreeDiskSpaceWarningLevel, value);
+ this.mFreeDiskSpaceWarningLevel.setOnPreferenceChangeListener(this.mOnChangeListener);
// Compute folder statistics
this.mComputeFolderStatistics =
diff --git a/src/com/cyanogenmod/filemanager/adapters/FileSystemObjectAdapter.java b/src/com/cyanogenmod/filemanager/adapters/FileSystemObjectAdapter.java
index 1ba1137e..e522f249 100644
--- a/src/com/cyanogenmod/filemanager/adapters/FileSystemObjectAdapter.java
+++ b/src/com/cyanogenmod/filemanager/adapters/FileSystemObjectAdapter.java
@@ -37,7 +37,6 @@ import com.cyanogenmod.filemanager.ui.ThemeManager.Theme;
import com.cyanogenmod.filemanager.util.FileHelper;
import com.cyanogenmod.filemanager.util.MimeTypeHelper;
-import java.text.DateFormat;
import java.util.ArrayList;
import java.util.List;
@@ -201,7 +200,6 @@ public class FileSystemObjectAdapter
private void processData(List<FileSystemObject> files) {
Theme theme = ThemeManager.getCurrentTheme(getContext());
Resources res = getContext().getResources();
- DateFormat df = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
this.mData = new DataHolder[getCount()];
int cc = (files == null) ? getCount() : files.size();
for (int i = 0; i < cc; i++) {
@@ -213,7 +211,9 @@ public class FileSystemObjectAdapter
if (fso instanceof ParentDirectory) {
sbSummary.append(res.getString(R.string.parent_dir));
} else {
- sbSummary.append(df.format(fso.getLastModifiedTime()));
+ sbSummary.append(
+ FileHelper.formatFileTime(
+ getContext(), fso.getLastModifiedTime()));
sbSummary.append(" "); //$NON-NLS-1$
sbSummary.append(fso.toRawPermissionString());
}
diff --git a/src/com/cyanogenmod/filemanager/preferences/FileManagerSettings.java b/src/com/cyanogenmod/filemanager/preferences/FileManagerSettings.java
index 6f66190d..39c8c721 100644
--- a/src/com/cyanogenmod/filemanager/preferences/FileManagerSettings.java
+++ b/src/com/cyanogenmod/filemanager/preferences/FileManagerSettings.java
@@ -79,6 +79,12 @@ public enum FileManagerSettings {
*/
SETTINGS_CASE_SENSITIVE_SORT("cm_filemanager_case_sensitive_sort", Boolean.FALSE), //$NON-NLS-1$
/**
+ * Defines the filetime format mode to use
+ * @hide
+ */
+ SETTINGS_FILETIME_FORMAT_MODE(
+ "cm_filemanager_filetime_format_mode", FileTimeFormatMode.LOCALE), //$NON-NLS-1$
+ /**
* When display a warning in free disk widget
* @hide
*/
diff --git a/src/com/cyanogenmod/filemanager/preferences/FileTimeFormatMode.java b/src/com/cyanogenmod/filemanager/preferences/FileTimeFormatMode.java
new file mode 100644
index 00000000..a4803d17
--- /dev/null
+++ b/src/com/cyanogenmod/filemanager/preferences/FileTimeFormatMode.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2012 The CyanogenMod Project
+ *
+ * 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 com.cyanogenmod.filemanager.preferences;
+
+/**
+ * An enumeration of the search result sort modes.
+ */
+public enum FileTimeFormatMode implements ObjectStringIdentifier {
+
+ /**
+ * System-defined.
+ */
+ SYSTEM("0", null), //$NON-NLS-1$
+ /**
+ * Locale dependent
+ */
+ LOCALE("1", null), //$NON-NLS-1$
+ /**
+ * dd/MM/yyyy HH:mm:ss
+ */
+ DDMMYYYY_HHMMSS("2", "dd/MM/yyyy HH:mm:ss"), //$NON-NLS-1$ //$NON-NLS-2$
+ /**
+ * MM/dd/yyyy HH:mm:ss
+ */
+ MMDDYYYY_HHMMSS("3", "MM/dd/yyyy HH:mm:ss"), //$NON-NLS-1$ //$NON-NLS-2$
+ /**
+ * yyyy-MM-dd HH:mm:ss
+ */
+ YYYYMMDD_HHMMSS("4", "yyyy-MM-dd HH:mm:ss"); //$NON-NLS-1$ //$NON-NLS-2$
+
+ private String mId;
+ private String mFormat;
+
+ /**
+ * Constructor of <code>FileTimeFormatMode</code>.
+ *
+ * @param id The unique identifier of the enumeration
+ * @param format The format (if apply)
+ */
+ private FileTimeFormatMode(String id, String format) {
+ this.mId = id;
+ this.mFormat = format;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getId() {
+ return this.mId;
+ }
+
+ /**
+ * Method that returns the format of the filetime.
+ *
+ * @return String The format of the filetime.
+ */
+ public String getFormat() {
+ return this.mFormat;
+ }
+
+ /**
+ * Method that returns an instance of {@link FileTimeFormatMode} from its
+ * unique identifier.
+ *
+ * @param id The unique identifier
+ * @return FileTimeFormatMode The filetime format mode
+ */
+ public static FileTimeFormatMode fromId(String id) {
+ FileTimeFormatMode[] values = values();
+ int cc = values.length;
+ for (int i = 0; i < cc; i++) {
+ if (values[i].mId.compareTo(id) == 0) {
+ return values[i];
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/src/com/cyanogenmod/filemanager/ui/dialogs/FsoPropertiesDialog.java b/src/com/cyanogenmod/filemanager/ui/dialogs/FsoPropertiesDialog.java
index c9b8df0d..8408e5fe 100644
--- a/src/com/cyanogenmod/filemanager/ui/dialogs/FsoPropertiesDialog.java
+++ b/src/com/cyanogenmod/filemanager/ui/dialogs/FsoPropertiesDialog.java
@@ -71,7 +71,7 @@ import com.cyanogenmod.filemanager.util.StorageHelper;
import java.io.File;
import java.io.IOException;
-import java.text.DateFormat;
+
/**
* A class that wraps a dialog for showing information about a {@link FileSystemObject}
*/
@@ -310,22 +310,12 @@ public class FsoPropertiesDialog
}
this.mTvSize.setText(size);
this.mTvContains.setText("-"); //$NON-NLS-1$
- DateFormat df = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
- try {
- tvLastAccessedTime.setText(df.format(this.mFso.getLastAccessedTime()));
- } catch (Exception e) {
- tvLastAccessedTime.setText("-"); //$NON-NLS-1$
- }
- try {
- tvLastModifiedTime.setText(df.format(this.mFso.getLastModifiedTime()));
- } catch (Exception e) {
- tvLastModifiedTime.setText("-"); //$NON-NLS-1$
- }
- try {
- tvLastChangedTime.setText(df.format(this.mFso.getLastChangedTime()));
- } catch (Exception e) {
- tvLastChangedTime.setText("-"); //$NON-NLS-1$
- }
+ tvLastAccessedTime.setText(
+ FileHelper.formatFileTime(this.mContext, this.mFso.getLastAccessedTime()));
+ tvLastModifiedTime.setText(
+ FileHelper.formatFileTime(this.mContext, this.mFso.getLastModifiedTime()));
+ tvLastChangedTime.setText(
+ FileHelper.formatFileTime(this.mContext, this.mFso.getLastChangedTime()));
//- Permissions
String loadingMsg = this.mContext.getString(R.string.loading_message);
diff --git a/src/com/cyanogenmod/filemanager/util/FileHelper.java b/src/com/cyanogenmod/filemanager/util/FileHelper.java
index 45c8acb5..8687e091 100644
--- a/src/com/cyanogenmod/filemanager/util/FileHelper.java
+++ b/src/com/cyanogenmod/filemanager/util/FileHelper.java
@@ -45,8 +45,10 @@ import com.cyanogenmod.filemanager.model.SystemFile;
import com.cyanogenmod.filemanager.model.User;
import com.cyanogenmod.filemanager.preferences.DisplayRestrictions;
import com.cyanogenmod.filemanager.preferences.FileManagerSettings;
+import com.cyanogenmod.filemanager.preferences.FileTimeFormatMode;
import com.cyanogenmod.filemanager.preferences.NavigationSortMode;
import com.cyanogenmod.filemanager.preferences.ObjectIdentifier;
+import com.cyanogenmod.filemanager.preferences.ObjectStringIdentifier;
import com.cyanogenmod.filemanager.preferences.Preferences;
import com.cyanogenmod.filemanager.util.MimeTypeHelper.MimeTypeCategory;
@@ -56,6 +58,8 @@ import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
@@ -108,6 +112,20 @@ public final class FileHelper {
*/
public static final String NEWLINE = System.getProperty("line.separator"); //$NON-NLS-1$
+ // The date/time formats objects
+ /**
+ * @hide
+ */
+ public final static Object DATETIME_SYNC = new Object();
+ /**
+ * @hide
+ */
+ public static boolean sReloadDateTimeFormats = true;
+ private static String sDateTimeFormatOrder = null;
+ private static FileTimeFormatMode sFiletimeFormatMode = null;
+ private static DateFormat sDateFormat = null;
+ private static DateFormat sTimeFormat = null;
+
/**
* Constructor of <code>FileHelper</code>.
*/
@@ -1261,4 +1279,47 @@ public final class FileHelper {
}
throw new InsufficientPermissionsException(executable);
}
+
+ /**
+ * Method that formats a filetime date with the specific system settings
+ *
+ * @param ctx The current context
+ * @param filetime The filetime date
+ * @return String The filetime date formatted
+ */
+ public static String formatFileTime(Context ctx, Date filetime) {
+ synchronized (DATETIME_SYNC) {
+ if (sReloadDateTimeFormats) {
+ String defaultValue =
+ ((ObjectStringIdentifier)FileManagerSettings.
+ SETTINGS_FILETIME_FORMAT_MODE.getDefaultValue()).getId();
+ String id = FileManagerSettings.SETTINGS_FILETIME_FORMAT_MODE.getId();
+ sFiletimeFormatMode =
+ FileTimeFormatMode.fromId(
+ Preferences.getSharedPreferences().getString(id, defaultValue));
+ if (sFiletimeFormatMode.compareTo(FileTimeFormatMode.SYSTEM) == 0) {
+ sDateTimeFormatOrder = ctx.getString(R.string.datetime_format_order);
+ sDateFormat = android.text.format.DateFormat.getDateFormat(ctx);
+ sTimeFormat = android.text.format.DateFormat.getTimeFormat(ctx);
+ } else if (sFiletimeFormatMode.compareTo(FileTimeFormatMode.LOCALE) == 0) {
+ sDateFormat =
+ DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
+ } else {
+ sDateFormat = new SimpleDateFormat(sFiletimeFormatMode.getFormat());
+ }
+ sReloadDateTimeFormats = false;
+ }
+ }
+
+ // Apply the user settings
+ String formatted = "-"; //$NON-NLS-1$
+ if (sFiletimeFormatMode.compareTo(FileTimeFormatMode.SYSTEM) == 0) {
+ String date = sDateFormat.format(filetime);
+ String time = sTimeFormat.format(filetime);
+ formatted = String.format(sDateTimeFormatOrder, date, time);
+ } else {
+ formatted = sDateFormat.format(filetime);
+ }
+ return formatted;
+ }
}