Code ready to provide different icons for well-known MIME types
authorDavid A. Velasco <dvelasco@solidgear.es>
Thu, 24 Jan 2013 12:34:27 +0000 (13:34 +0100)
committerDavid A. Velasco <dvelasco@solidgear.es>
Thu, 24 Jan 2013 12:34:27 +0000 (13:34 +0100)
21 files changed:
res/drawable-hdpi/file_doc.png [new file with mode: 0644]
res/drawable-hdpi/file_image.png [new file with mode: 0644]
res/drawable-hdpi/file_movie.png [new file with mode: 0644]
res/drawable-hdpi/file_pdf.png [new file with mode: 0644]
res/drawable-hdpi/file_sound.png [new file with mode: 0644]
res/drawable-hdpi/file_zip.png [new file with mode: 0644]
res/drawable-ldpi/file_doc.png [new file with mode: 0644]
res/drawable-ldpi/file_image.png [new file with mode: 0644]
res/drawable-ldpi/file_movie.png [new file with mode: 0644]
res/drawable-ldpi/file_pdf.png [new file with mode: 0644]
res/drawable-ldpi/file_sound.png [new file with mode: 0644]
res/drawable-ldpi/file_zip.png [new file with mode: 0644]
res/drawable-mdpi/file_doc.png [new file with mode: 0644]
res/drawable-mdpi/file_image.png [new file with mode: 0644]
res/drawable-mdpi/file_movie.png [new file with mode: 0644]
res/drawable-mdpi/file_pdf.png [new file with mode: 0644]
res/drawable-mdpi/file_sound.png [new file with mode: 0644]
res/drawable-mdpi/file_zip.png [new file with mode: 0644]
src/com/owncloud/android/DisplayUtils.java
src/com/owncloud/android/ui/adapter/FileListListAdapter.java
src/com/owncloud/android/ui/fragment/FileDetailFragment.java

diff --git a/res/drawable-hdpi/file_doc.png b/res/drawable-hdpi/file_doc.png
new file mode 100644 (file)
index 0000000..bf4b832
Binary files /dev/null and b/res/drawable-hdpi/file_doc.png differ
diff --git a/res/drawable-hdpi/file_image.png b/res/drawable-hdpi/file_image.png
new file mode 100644 (file)
index 0000000..bf4b832
Binary files /dev/null and b/res/drawable-hdpi/file_image.png differ
diff --git a/res/drawable-hdpi/file_movie.png b/res/drawable-hdpi/file_movie.png
new file mode 100644 (file)
index 0000000..bf4b832
Binary files /dev/null and b/res/drawable-hdpi/file_movie.png differ
diff --git a/res/drawable-hdpi/file_pdf.png b/res/drawable-hdpi/file_pdf.png
new file mode 100644 (file)
index 0000000..bf4b832
Binary files /dev/null and b/res/drawable-hdpi/file_pdf.png differ
diff --git a/res/drawable-hdpi/file_sound.png b/res/drawable-hdpi/file_sound.png
new file mode 100644 (file)
index 0000000..bf4b832
Binary files /dev/null and b/res/drawable-hdpi/file_sound.png differ
diff --git a/res/drawable-hdpi/file_zip.png b/res/drawable-hdpi/file_zip.png
new file mode 100644 (file)
index 0000000..bf4b832
Binary files /dev/null and b/res/drawable-hdpi/file_zip.png differ
diff --git a/res/drawable-ldpi/file_doc.png b/res/drawable-ldpi/file_doc.png
new file mode 100644 (file)
index 0000000..8cdfc4f
Binary files /dev/null and b/res/drawable-ldpi/file_doc.png differ
diff --git a/res/drawable-ldpi/file_image.png b/res/drawable-ldpi/file_image.png
new file mode 100644 (file)
index 0000000..8cdfc4f
Binary files /dev/null and b/res/drawable-ldpi/file_image.png differ
diff --git a/res/drawable-ldpi/file_movie.png b/res/drawable-ldpi/file_movie.png
new file mode 100644 (file)
index 0000000..8cdfc4f
Binary files /dev/null and b/res/drawable-ldpi/file_movie.png differ
diff --git a/res/drawable-ldpi/file_pdf.png b/res/drawable-ldpi/file_pdf.png
new file mode 100644 (file)
index 0000000..8cdfc4f
Binary files /dev/null and b/res/drawable-ldpi/file_pdf.png differ
diff --git a/res/drawable-ldpi/file_sound.png b/res/drawable-ldpi/file_sound.png
new file mode 100644 (file)
index 0000000..8cdfc4f
Binary files /dev/null and b/res/drawable-ldpi/file_sound.png differ
diff --git a/res/drawable-ldpi/file_zip.png b/res/drawable-ldpi/file_zip.png
new file mode 100644 (file)
index 0000000..8cdfc4f
Binary files /dev/null and b/res/drawable-ldpi/file_zip.png differ
diff --git a/res/drawable-mdpi/file_doc.png b/res/drawable-mdpi/file_doc.png
new file mode 100644 (file)
index 0000000..561c788
Binary files /dev/null and b/res/drawable-mdpi/file_doc.png differ
diff --git a/res/drawable-mdpi/file_image.png b/res/drawable-mdpi/file_image.png
new file mode 100644 (file)
index 0000000..561c788
Binary files /dev/null and b/res/drawable-mdpi/file_image.png differ
diff --git a/res/drawable-mdpi/file_movie.png b/res/drawable-mdpi/file_movie.png
new file mode 100644 (file)
index 0000000..561c788
Binary files /dev/null and b/res/drawable-mdpi/file_movie.png differ
diff --git a/res/drawable-mdpi/file_pdf.png b/res/drawable-mdpi/file_pdf.png
new file mode 100644 (file)
index 0000000..561c788
Binary files /dev/null and b/res/drawable-mdpi/file_pdf.png differ
diff --git a/res/drawable-mdpi/file_sound.png b/res/drawable-mdpi/file_sound.png
new file mode 100644 (file)
index 0000000..561c788
Binary files /dev/null and b/res/drawable-mdpi/file_sound.png differ
diff --git a/res/drawable-mdpi/file_zip.png b/res/drawable-mdpi/file_zip.png
new file mode 100644 (file)
index 0000000..561c788
Binary files /dev/null and b/res/drawable-mdpi/file_zip.png differ
index a9cfe1d..d618811 100644 (file)
@@ -1,5 +1,6 @@
 /* ownCloud Android client application\r
  *   Copyright (C) 2011  Bartek Przybylski\r
 /* ownCloud Android client application\r
  *   Copyright (C) 2011  Bartek Przybylski\r
+ *   Copyright (2) 2012-2013 ownCloud Inc.\r
  *\r
  *   This program is free software: you can redistribute it and/or modify\r
  *   it under the terms of the GNU General Public License as published by\r
  *\r
  *   This program is free software: you can redistribute it and/or modify\r
  *   it under the terms of the GNU General Public License as published by\r
 \r
 package com.owncloud.android;\r
 \r
 \r
 package com.owncloud.android;\r
 \r
+import java.util.Arrays;\r
 import java.util.Date;\r
 import java.util.HashMap;\r
 import java.util.Date;\r
 import java.util.HashMap;\r
+import java.util.HashSet;\r
+import java.util.Set;\r
+\r
+import android.util.Log;\r
 \r
 /**\r
  * A helper class for some string operations.\r
  * \r
  * @author Bartek Przybylski\r
 \r
 /**\r
  * A helper class for some string operations.\r
  * \r
  * @author Bartek Przybylski\r
- * \r
+ * @author David A. Velasco\r
  */\r
 public class DisplayUtils {\r
  */\r
 public class DisplayUtils {\r
-\r
-    private static final String[] suffixes = { "B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" };\r
+    \r
+    private static String TAG = DisplayUtils.class.getSimpleName(); \r
+    \r
+    private static final String[] sizeSuffixes = { "B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" };\r
 \r
     private static HashMap<String, String> mimeType2HUmanReadable;\r
     static {\r
 \r
     private static HashMap<String, String> mimeType2HUmanReadable;\r
     static {\r
@@ -48,6 +56,22 @@ public class DisplayUtils {
 \r
     }\r
 \r
 \r
     }\r
 \r
+    private static final String TYPE_APPLICATION = "application";\r
+    private static final String TYPE_AUDIO = "audio";\r
+    private static final String TYPE_IMAGE = "image";\r
+    private static final String TYPE_TXT = "txt";\r
+    private static final String TYPE_VIDEO = "video";\r
+    \r
+    private static final String SUBTYPE_PDF = "pdf";\r
+    private static final String[] SUBTYPES_DOCUMENT = { "msword", "mspowerpoint", "msexcel", \r
+                                                        "vnd.oasis.opendocument.presentation",\r
+                                                        "vnd.oasis.opendocument.spreadsheet",\r
+                                                        "vnd.oasis.opendocument.text"\r
+                                                        };\r
+    private static Set<String> SUBTYPES_DOCUMENT_SET = new HashSet<String>(Arrays.asList(SUBTYPES_DOCUMENT));\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
+    \r
     /**\r
      * Converts the file size in bytes to human readable output.\r
      * \r
     /**\r
      * Converts the file size in bytes to human readable output.\r
      * \r
@@ -57,12 +81,12 @@ public class DisplayUtils {
     public static String bytesToHumanReadable(long bytes) {\r
         double result = bytes;\r
         int attachedsuff = 0;\r
     public static String bytesToHumanReadable(long bytes) {\r
         double result = bytes;\r
         int attachedsuff = 0;\r
-        while (result > 1024 && attachedsuff < suffixes.length) {\r
+        while (result > 1024 && attachedsuff < sizeSuffixes.length) {\r
             result /= 1024.;\r
             attachedsuff++;\r
         }\r
         result = ((int) (result * 100)) / 100.;\r
             result /= 1024.;\r
             attachedsuff++;\r
         }\r
         result = ((int) (result * 100)) / 100.;\r
-        return result + " " + suffixes[attachedsuff];\r
+        return result + " " + sizeSuffixes[attachedsuff];\r
     }\r
 \r
     /**\r
     }\r
 \r
     /**\r
@@ -104,6 +128,58 @@ public class DisplayUtils {
             return mimetype.split("/")[1].toUpperCase() + " file";\r
         return "Unknown type";\r
     }\r
             return mimetype.split("/")[1].toUpperCase() + " file";\r
         return "Unknown type";\r
     }\r
+    \r
+    \r
+    /**\r
+     * Returns the resource identifier of an image resource to use as icon associated to a \r
+     * known MIME type.\r
+     * \r
+     * @param mimetype      MIME type string.\r
+     * @return              Resource identifier of an image resource.\r
+     */\r
+    public static int getResourceId(String mimetype) {\r
+\r
+        if (mimetype == null || "DIR".equals(mimetype)) {\r
+            return R.drawable.ic_menu_archive;\r
+            \r
+        } else {\r
+            String [] parts = mimetype.split("/");\r
+            String type = parts[0];\r
+            String subtype = parts[1];\r
+            \r
+            if(TYPE_TXT.equals(type)) {\r
+                return R.drawable.file_doc;\r
+    \r
+            } else if(TYPE_IMAGE.equals(type)) {\r
+                return R.drawable.file_image;\r
+                \r
+            } else if(TYPE_VIDEO.equals(type)) {\r
+                return R.drawable.file_movie;\r
+                \r
+            } else if(TYPE_AUDIO.equals(type)) {  \r
+                return R.drawable.file_sound;\r
+                \r
+            } else if(TYPE_APPLICATION.equals(type)) {\r
+                \r
+                if (SUBTYPE_PDF.equals(subtype)) {\r
+                    return R.drawable.file_pdf;\r
+                    \r
+                } else if (SUBTYPES_DOCUMENT_SET.contains(subtype)) {\r
+                    return R.drawable.file_doc;\r
+\r
+                } else if (SUBTYPES_COMPRESSED_SET.contains(subtype)) {\r
+                    return R.drawable.file_zip;\r
+                }\r
+    \r
+            }\r
+            // problems: RAR, RTF, 3GP are send as application/octet-stream from the server ; extension in the filename should be explicitly reviewed\r
+        }\r
+\r
+        // default icon\r
+        return R.drawable.file;\r
+    }\r
+\r
+    \r
 \r
     /**\r
      * Converts Unix time to human readable format\r
 \r
     /**\r
      * Converts Unix time to human readable format\r
index 503dfff..b924cc8 100644 (file)
@@ -115,11 +115,7 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
 \r
             fileName.setText(name);\r
             ImageView fileIcon = (ImageView) view.findViewById(R.id.imageView1);\r
 \r
             fileName.setText(name);\r
             ImageView fileIcon = (ImageView) view.findViewById(R.id.imageView1);\r
-            if (file.getMimetype() == null || !file.getMimetype().equals("DIR")) {\r
-                fileIcon.setImageResource(R.drawable.file);\r
-            } else {\r
-                fileIcon.setImageResource(R.drawable.ic_menu_archive);\r
-            }\r
+            fileIcon.setImageResource(DisplayUtils.getResourceId(file.getMimetype()));\r
             ImageView localStateView = (ImageView) view.findViewById(R.id.imageView2);\r
             FileDownloaderBinder downloaderBinder = mTransferServiceGetter.getFileDownloaderBinder();\r
             FileUploaderBinder uploaderBinder = mTransferServiceGetter.getFileUploaderBinder();\r
             ImageView localStateView = (ImageView) view.findViewById(R.id.imageView2);\r
             FileDownloaderBinder downloaderBinder = mTransferServiceGetter.getFileDownloaderBinder();\r
             FileUploaderBinder uploaderBinder = mTransferServiceGetter.getFileUploaderBinder();\r
index 2c43278..fc6f167 100644 (file)
@@ -507,8 +507,7 @@ public class FileDetailFragment extends SherlockFragment implements
             \r
             // set file details\r
             setFilename(mFile.getFileName());\r
             \r
             // set file details\r
             setFilename(mFile.getFileName());\r
-            setFiletype(DisplayUtils.convertMIMEtoPrettyPrint(mFile\r
-                    .getMimetype()));\r
+            setFiletype(mFile.getMimetype());\r
             setFilesize(mFile.getFileLength());\r
             if(ocVersionSupportsTimeCreated()){\r
                 setTimeCreated(mFile.getCreationTimestamp());\r
             setFilesize(mFile.getFileLength());\r
             if(ocVersionSupportsTimeCreated()){\r
                 setTimeCreated(mFile.getCreationTimestamp());\r
@@ -560,8 +559,14 @@ public class FileDetailFragment extends SherlockFragment implements
      */\r
     private void setFiletype(String mimetype) {\r
         TextView tv = (TextView) getView().findViewById(R.id.fdType);\r
      */\r
     private void setFiletype(String mimetype) {\r
         TextView tv = (TextView) getView().findViewById(R.id.fdType);\r
-        if (tv != null)\r
-            tv.setText(mimetype);\r
+        if (tv != null) {\r
+            String printableMimetype = DisplayUtils.convertMIMEtoPrettyPrint(mimetype);;        \r
+            tv.setText(printableMimetype);\r
+        }\r
+        ImageView iv = (ImageView) getView().findViewById(R.id.fdIcon);\r
+        if (iv != null) {\r
+            iv.setImageResource(DisplayUtils.getResourceId(mimetype));\r
+        }\r
     }\r
 \r
     /**\r
     }\r
 \r
     /**\r