Merge branch 'master' into develop
[pub/Android/ownCloud.git] / src / com / owncloud / android / utils / DisplayUtils.java
index beb08c7..999700f 100644 (file)
 package com.owncloud.android.utils;\r
 \r
 import java.net.IDN;\r
+import java.text.DateFormat;\r
 import java.util.Arrays;\r
 import java.util.Calendar;\r
 import java.util.Date;\r
 import java.util.HashMap;\r
 import java.util.HashSet;\r
 import java.util.Set;\r
+import java.util.Vector;\r
 \r
 import android.annotation.TargetApi;\r
 import android.content.Context;\r
 import android.os.Build;\r
 import android.text.format.DateUtils;\r
+import android.webkit.MimeTypeMap;\r
 \r
 import com.owncloud.android.MainApp;\r
 import com.owncloud.android.R;\r
@@ -74,21 +77,27 @@ public class DisplayUtils {
     \r
     private static final String SUBTYPE_PDF = "pdf";\r
     private static final String SUBTYPE_XML = "xml";\r
-    private static final String[] SUBTYPES_DOCUMENT = { "msword",\r
-                                                        "vnd.openxmlformats-officedocument.wordprocessingml.document",\r
-                                                        "vnd.oasis.opendocument.text",\r
-                                                        "rtf"\r
-                                                        };\r
+    private static final String[] SUBTYPES_DOCUMENT = { \r
+        "msword",\r
+        "vnd.openxmlformats-officedocument.wordprocessingml.document",\r
+        "vnd.oasis.opendocument.text",\r
+        "rtf",\r
+        "javascript"\r
+    };\r
     private static Set<String> SUBTYPES_DOCUMENT_SET = new HashSet<String>(Arrays.asList(SUBTYPES_DOCUMENT));\r
-    private static final String[] SUBTYPES_SPREADSHEET = { "msexcel",\r
-                                                           "vnd.openxmlformats-officedocument.spreadsheetml.sheet",\r
-                                                           "vnd.oasis.opendocument.spreadsheet"\r
-                                                           };\r
+    private static final String[] SUBTYPES_SPREADSHEET = {\r
+        "msexcel",\r
+        "vnd.ms-excel",\r
+        "vnd.openxmlformats-officedocument.spreadsheetml.sheet",\r
+        "vnd.oasis.opendocument.spreadsheet"\r
+    };\r
     private static Set<String> SUBTYPES_SPREADSHEET_SET = new HashSet<String>(Arrays.asList(SUBTYPES_SPREADSHEET));\r
-    private static final String[] SUBTYPES_PRESENTATION = { "mspowerpoint",\r
-                                                            "vnd.openxmlformats-officedocument.presentationml.presentation",\r
-                                                            "vnd.oasis.opendocument.presentation"\r
-                                                            };\r
+    private static final String[] SUBTYPES_PRESENTATION = { \r
+        "mspowerpoint",\r
+        "vnd.ms-powerpoint",\r
+        "vnd.openxmlformats-officedocument.presentationml.presentation",\r
+        "vnd.oasis.opendocument.presentation"\r
+    };\r
     private static Set<String> SUBTYPES_PRESENTATION_SET = new HashSet<String>(Arrays.asList(SUBTYPES_PRESENTATION));\r
     private static final String[] SUBTYPES_COMPRESSED = {"x-tar", "x-gzip", "zip"};\r
     private static final Set<String> SUBTYPES_COMPRESSED_SET = new HashSet<String>(Arrays.asList(SUBTYPES_COMPRESSED));\r
@@ -96,6 +105,8 @@ public class DisplayUtils {
     private static final String EXTENSION_RAR = "rar";\r
     private static final String EXTENSION_RTF = "rtf";\r
     private static final String EXTENSION_3GP = "3gp";\r
+    private static final String EXTENSION_PY = "py";\r
+    private static final String EXTENSION_JS = "js";\r
     \r
     /**\r
      * Converts the file size in bytes to human readable output.\r
@@ -115,30 +126,6 @@ public class DisplayUtils {
     }\r
 \r
     /**\r
-     * Removes special HTML entities from a string\r
-     * \r
-     * @param s Input string\r
-     * @return A cleaned version of the string\r
-     */\r
-    public static String HtmlDecode(String s) {\r
-        /*\r
-         * TODO: Perhaps we should use something more proven like:\r
-         * http://commons.apache.org/lang/api-2.6/org/apache/commons/lang/StringEscapeUtils.html#unescapeHtml%28java.lang.String%29\r
-         */\r
-\r
-        String ret = "";\r
-        for (int i = 0; i < s.length(); ++i) {\r
-            if (s.charAt(i) == '%') {\r
-                ret += (char) Integer.parseInt(s.substring(i + 1, i + 3), 16);\r
-                i += 2;\r
-            } else {\r
-                ret += s.charAt(i);\r
-            }\r
-        }\r
-        return ret;\r
-    }\r
-\r
-    /**\r
      * Converts MIME types like "image/jpg" to more end user friendly output\r
      * like "JPG image".\r
      * \r
@@ -156,19 +143,23 @@ public class DisplayUtils {
     \r
     \r
     /**\r
-     * Returns the resource identifier of an image resource to use as icon associated to a \r
-     * known MIME type.\r
+     * Returns the resource identifier of an image to use as icon associated to a known MIME type.\r
      * \r
-     * @param mimetype      MIME type string.\r
-     * @param filename      name, with extension\r
-     * @return              Resource identifier of an image resource.\r
+     * @param mimetype      MIME type string; if NULL, the method tries to guess it from the extension in filename\r
+     * @param filename      Name, with extension.\r
+     * @return              Identifier of an image resource.\r
      */\r
-    public static int getResourceId(String mimetype, String filename) {\r
+    public static int getFileTypeIconId(String mimetype, String filename) {\r
 \r
         if (mimetype == null) {\r
-            return R.drawable.file;\r
-\r
-        } else if ("DIR".equals(mimetype)) {\r
+            String fileExtension = getExtension(filename);\r
+            mimetype = MimeTypeMap.getSingleton().getMimeTypeFromExtension(fileExtension);\r
+            if (mimetype == null) {\r
+                mimetype = TYPE_APPLICATION + "/" + SUBTYPE_OCTET_STREAM;\r
+            }\r
+        } \r
+            \r
+        if ("DIR".equals(mimetype)) {\r
             return R.drawable.ic_menu_archive;\r
 \r
         } else {\r
@@ -217,7 +208,10 @@ public class DisplayUtils {
                         \r
                     } else if (getExtension(filename).equalsIgnoreCase(EXTENSION_3GP)) {\r
                         return R.drawable.file_movie;\r
-                        \r
+                     \r
+                    } else if ( getExtension(filename).equalsIgnoreCase(EXTENSION_PY) ||\r
+                                getExtension(filename).equalsIgnoreCase(EXTENSION_JS)) {\r
+                        return R.drawable.file_doc;\r
                     } \r
                 } \r
             }\r
@@ -229,19 +223,19 @@ public class DisplayUtils {
 \r
     \r
     private static String getExtension(String filename) {\r
-        String extension = filename.substring(filename.lastIndexOf(".") + 1);\r
-        \r
+        String extension = filename.substring(filename.lastIndexOf(".") + 1).toLowerCase();\r
         return extension;\r
     }\r
     \r
     /**\r
      * Converts Unix time to human readable format\r
-     * @param miliseconds that have passed since 01/01/1970\r
+     * @param milliseconds that have passed since 01/01/1970\r
      * @return The human readable time for the users locale\r
      */\r
     public static String unixTimeToHumanReadable(long milliseconds) {\r
         Date date = new Date(milliseconds);\r
-        return date.toLocaleString();\r
+        DateFormat df = DateFormat.getDateTimeInstance();\r
+        return df.format(date);\r
     }\r
     \r
     \r
@@ -302,7 +296,11 @@ public class DisplayUtils {
         return fileExtension;\r
     }\r
 \r
-    public static CharSequence getRelativeDateTimeString(Context c, long time, long minResolution, long transitionResolution, int flags){\r
+    @SuppressWarnings("deprecation")\r
+    public static CharSequence getRelativeDateTimeString (\r
+            Context c, long time, long minResolution, long transitionResolution, int flags\r
+            ){\r
+        \r
         CharSequence dateString = "";\r
         \r
         // in Future\r
@@ -314,12 +312,15 @@ public class DisplayUtils {
             return c.getString(R.string.file_list_seconds_ago);\r
         } else {\r
             // Workaround 2.x bug (see https://github.com/owncloud/android/issues/716)\r
-            if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.HONEYCOMB && (System.currentTimeMillis() - time) > 24 * 60 * 60 * 1000){\r
+            if (    Build.VERSION.SDK_INT <= Build.VERSION_CODES.HONEYCOMB && \r
+                    (System.currentTimeMillis() - time) > 24 * 60 * 60 * 1000   ) {\r
                 Date date = new Date(time);\r
                 date.setHours(0);\r
                 date.setMinutes(0);\r
                 date.setSeconds(0);\r
-                dateString = DateUtils.getRelativeDateTimeString(c, date.getTime(), minResolution, transitionResolution, flags);\r
+                dateString = DateUtils.getRelativeDateTimeString(\r
+                        c, date.getTime(), minResolution, transitionResolution, flags\r
+                );\r
             } else {\r
                 dateString = DateUtils.getRelativeDateTimeString(c, time, minResolution, transitionResolution, flags);\r
             }\r
@@ -340,4 +341,5 @@ public class DisplayUtils {
         }\r
         return path;\r
     }\r
+\r
 }\r