Merge branch 'new_filetype_icons' of https://github.com/owncloud/android into materia...
authorAndy Scherzinger <info@andy-scherzinger.de>
Fri, 11 Sep 2015 11:06:14 +0000 (13:06 +0200)
committerAndy Scherzinger <info@andy-scherzinger.de>
Fri, 11 Sep 2015 11:06:14 +0000 (13:06 +0200)
Conflicts:
src/com/owncloud/android/utils/DisplayUtils.java

1  2 
src/com/owncloud/android/ui/adapter/FileListListAdapter.java
src/com/owncloud/android/ui/adapter/LocalFileListAdapter.java
src/com/owncloud/android/utils/DisplayUtils.java

@@@ -55,6 -55,7 +55,7 @@@ import com.owncloud.android.services.Op
  import com.owncloud.android.ui.activity.ComponentsGetter;\r
  import com.owncloud.android.utils.DisplayUtils;\r
  import com.owncloud.android.utils.FileStorageUtils;\r
+ import com.owncloud.android.utils.MimetypeIconUtil;\r
  \r
  \r
  /**\r
@@@ -193,7 -194,6 +194,7 @@@ public class FileListListAdapter extend
              switch (viewType){\r
                  case LIST_ITEM:\r
                      TextView fileSizeV = (TextView) view.findViewById(R.id.file_size);\r
 +                    TextView fileSizeSeparatorV = (TextView) view.findViewById(R.id.file_separator);\r
                      TextView lastModV = (TextView) view.findViewById(R.id.last_mod);\r
                      ImageView checkBoxV = (ImageView) view.findViewById(R.id.custom_checkbox);\r
  \r
  \r
                      checkBoxV.setVisibility(View.GONE);\r
  \r
 +                    fileSizeSeparatorV.setVisibility(View.VISIBLE);\r
                      fileSizeV.setVisibility(View.VISIBLE);\r
                      fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength()));\r
  \r
                              } else {\r
                                  if (parentList.isItemChecked(position)) {\r
                                      checkBoxV.setImageResource(\r
 -                                            android.R.drawable.checkbox_on_background);\r
 +                                            R.drawable.ic_checkbox_marked);\r
                                  } else {\r
                                      checkBoxV.setImageResource(\r
 -                                            android.R.drawable.checkbox_off_background);\r
 +                                            R.drawable.ic_checkbox_blank_outline);\r
                                  }\r
                                  checkBoxV.setVisibility(View.VISIBLE);\r
                              }\r
                          }\r
  \r
                      } else { //Folder\r
 +                        fileSizeSeparatorV.setVisibility(View.INVISIBLE);\r
                          fileSizeV.setVisibility(View.INVISIBLE);\r
                      }\r
  \r
  \r
  \r
                  } else {\r
-                     fileIcon.setImageResource(DisplayUtils.getFileTypeIconId(file.getMimetype(),\r
+                     fileIcon.setImageResource(MimetypeIconUtil.getFileTypeIconId(file.getMimetype(),\r
                              file.getFileName()));\r
                  }\r
  \r
              } else {\r
                  // Folder\r
\r
-                 if (checkIfFileIsSharedWithMe(file)) {\r
-                     fileIcon.setImageResource(R.drawable.shared_with_me_folder);\r
-                 } else if (file.isShareByLink()) {\r
-                     // If folder is sharedByLink, icon folder must be changed to\r
-                     // folder-public one\r
-                     fileIcon.setImageResource(R.drawable.folder_public);\r
-                 } else {\r
-                     fileIcon.setImageResource(\r
-                             DisplayUtils.getFileTypeIconId(file.getMimetype(), file.getFileName())\r
-                     );\r
-                 }\r
+                 fileIcon.setImageResource(\r
+                         MimetypeIconUtil.getFolderTypeIconId(\r
+                                 checkIfFileIsSharedWithMe(file), file.isShareByLink()));\r
              }\r
          }\r
  \r
@@@ -39,6 -39,7 +39,7 @@@ import com.owncloud.android.R
  import com.owncloud.android.datamodel.ThumbnailsCacheManager;
  import com.owncloud.android.utils.BitmapUtils;
  import com.owncloud.android.utils.DisplayUtils;
+ import com.owncloud.android.utils.MimetypeIconUtil;
  
  /**
   * This Adapter populates a ListView with all files and directories contained
@@@ -111,11 -112,9 +112,11 @@@ public class LocalFileListAdapter exten
              fileIcon.setTag(file.hashCode());
  
              TextView fileSizeV = (TextView) view.findViewById(R.id.file_size);
 +            TextView fileSizeSeparatorV = (TextView) view.findViewById(R.id.file_separator);
              TextView lastModV = (TextView) view.findViewById(R.id.last_mod);
              ImageView checkBoxV = (ImageView) view.findViewById(R.id.custom_checkbox);
              if (!file.isDirectory()) {
 +                fileSizeSeparatorV.setVisibility(View.VISIBLE);
                  fileSizeV.setVisibility(View.VISIBLE);
                  fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.length()));
  
                      checkBoxV.setVisibility(View.GONE);
                  } else {
                      if (parentList.isItemChecked(position)) {
 -                        checkBoxV.setImageResource(android.R.drawable.checkbox_on_background);
 +                        checkBoxV.setImageResource(R.drawable.ic_checkbox_marked);
                      } else {
 -                        checkBoxV.setImageResource(android.R.drawable.checkbox_off_background);
 +                        checkBoxV.setImageResource(R.drawable.ic_checkbox_blank_outline);
                      }
                      checkBoxV.setVisibility(View.VISIBLE);
                  }
                          }
                      }
                  } else {
-                     fileIcon.setImageResource(DisplayUtils.getFileTypeIconId(null, file.getName()));
+                     fileIcon.setImageResource(MimetypeIconUtil.getFileTypeIconId(null, file.getName()));
                  }  
  
              } else {
 +                fileSizeSeparatorV.setVisibility(View.GONE);
                  fileSizeV.setVisibility(View.GONE);
                  lastModV.setVisibility(View.GONE);
                  checkBoxV.setVisibility(View.GONE);
  \r
  package com.owncloud.android.utils;\r
  \r
- import java.math.BigDecimal;\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.app.Activity;\r
  import android.content.Context;\r
- import android.graphics.Color;\r
  import android.graphics.Point;\r
  import android.graphics.PorterDuff;\r
  import android.os.Build;\r
  import android.text.format.DateUtils;\r
  import android.view.Display;\r
- import android.webkit.MimeTypeMap;\r
  import android.widget.ProgressBar;\r
  import android.widget.SeekBar;\r
  \r
@@@ -50,94 -37,54 +37,61 @@@ import com.owncloud.android.MainApp
  import com.owncloud.android.R;\r
  import com.owncloud.android.datamodel.OCFile;\r
  \r
++import java.math.BigDecimal;\r
+ import java.net.IDN;\r
+ import java.text.DateFormat;\r
+ import java.util.Calendar;\r
+ import java.util.Date;\r
+ import java.util.HashMap;\r
+ import java.util.Map;\r
\r
  /**\r
   * A helper class for some string operations.\r
   */\r
  public class DisplayUtils {\r
      \r
      private static final String OWNCLOUD_APP_NAME = "ownCloud";\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
 +    private static final int[] sizeScales = { 0, 0, 0, 1, 1, 2, 2, 2, 2 };\r
  \r
-     private static HashMap<String, String> mimeType2HUmanReadable;\r
+     private static Map<String, String> mimeType2HumanReadable;\r
\r
      static {\r
-         mimeType2HUmanReadable = new HashMap<String, String>();\r
+         mimeType2HumanReadable = new HashMap<String, String>();\r
          // images\r
-         mimeType2HUmanReadable.put("image/jpeg", "JPEG image");\r
-         mimeType2HUmanReadable.put("image/jpg", "JPEG image");\r
-         mimeType2HUmanReadable.put("image/png", "PNG image");\r
-         mimeType2HUmanReadable.put("image/bmp", "Bitmap image");\r
-         mimeType2HUmanReadable.put("image/gif", "GIF image");\r
-         mimeType2HUmanReadable.put("image/svg+xml", "JPEG image");\r
-         mimeType2HUmanReadable.put("image/tiff", "TIFF image");\r
+         mimeType2HumanReadable.put("image/jpeg", "JPEG image");\r
+         mimeType2HumanReadable.put("image/jpg", "JPEG image");\r
+         mimeType2HumanReadable.put("image/png", "PNG image");\r
+         mimeType2HumanReadable.put("image/bmp", "Bitmap image");\r
+         mimeType2HumanReadable.put("image/gif", "GIF image");\r
+         mimeType2HumanReadable.put("image/svg+xml", "JPEG image");\r
+         mimeType2HumanReadable.put("image/tiff", "TIFF image");\r
          // music\r
-         mimeType2HUmanReadable.put("audio/mpeg", "MP3 music file");\r
-         mimeType2HUmanReadable.put("application/ogg", "OGG music file");\r
\r
+         mimeType2HumanReadable.put("audio/mpeg", "MP3 music file");\r
+         mimeType2HumanReadable.put("application/ogg", "OGG music file");\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 = "text";\r
-     private static final String TYPE_VIDEO = "video";\r
-     \r
-     private static final String SUBTYPE_PDF = "pdf";\r
-     private static final String SUBTYPE_XML = "xml";\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 = {\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 = { \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
-     private static final String SUBTYPE_OCTET_STREAM = "octet-stream";\r
-     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
 -     * \r
 +     * <ul>\r
 +     *     <li>appends a size suffix, e.g. B, KB, MB etc.</li>\r
 +     *     <li>rounds the size based on the suffix to 0,1 or 2 decimals</li>\r
 +     * </ul>\r
 +     *\r
       * @param bytes Input file size\r
       * @return Like something readable like "12 MB"\r
       */\r
      public static String bytesToHumanReadable(long bytes) {\r
          double result = bytes;\r
--        int attachedsuff = 0;\r
--        while (result > 1024 && attachedsuff < sizeSuffixes.length) {\r
++        int attachedSuff = 0;\r
++        while (result > 1024 && attachedSuff < sizeSuffixes.length) {\r
              result /= 1024.;\r
--            attachedsuff++;\r
++            attachedSuff++;\r
          }\r
 -        result = ((int) (result * 100)) / 100.;\r
 -        return result + " " + sizeSuffixes[attachedsuff];\r
 +\r
 +        return new BigDecimal(result).setScale(\r
-                 sizeScales[attachedsuff], BigDecimal.ROUND_HALF_UP) + " " + sizeSuffixes[attachedsuff];\r
++                sizeScales[attachedSuff], BigDecimal.ROUND_HALF_UP) + " " + sizeSuffixes[attachedSuff];\r
      }\r
  \r
      /**\r
       * @return A human friendly version of the MIME type\r
       */\r
      public static String convertMIMEtoPrettyPrint(String mimetype) {\r
-         if (mimeType2HUmanReadable.containsKey(mimetype)) {\r
-             return mimeType2HUmanReadable.get(mimetype);\r
+         if (mimeType2HumanReadable.containsKey(mimetype)) {\r
+             return mimeType2HumanReadable.get(mimetype);\r
          }\r
          if (mimetype.split("/").length >= 2)\r
              return mimetype.split("/")[1].toUpperCase() + " file";\r
          return "Unknown type";\r
      }\r
-     \r
-     \r
-     /**\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; 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 getFileTypeIconId(String mimetype, String filename) {\r
\r
-         if (mimetype == null) {\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
-             String [] parts = mimetype.split("/");\r
-             String type = parts[0];\r
-             String subtype = (parts.length > 1) ? 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 (SUBTYPE_XML.equals(subtype)) {\r
-                     return R.drawable.file_doc;\r
\r
-                 } else if (SUBTYPES_DOCUMENT_SET.contains(subtype)) {\r
-                     return R.drawable.file_doc;\r
\r
-                 } else if (SUBTYPES_SPREADSHEET_SET.contains(subtype)) {\r
-                     return R.drawable.file_xls;\r
\r
-                 } else if (SUBTYPES_PRESENTATION_SET.contains(subtype)) {\r
-                     return R.drawable.file_ppt;\r
\r
-                 } else if (SUBTYPES_COMPRESSED_SET.contains(subtype)) {\r
-                     return R.drawable.file_zip;\r
\r
-                 } else if (SUBTYPE_OCTET_STREAM.equals(subtype) ) {\r
-                     if (getExtension(filename).equalsIgnoreCase(EXTENSION_RAR)) {\r
-                         return R.drawable.file_zip;\r
-                         \r
-                     } else if (getExtension(filename).equalsIgnoreCase(EXTENSION_RTF)) {\r
-                         return R.drawable.file_doc;\r
-                         \r
-                     } else if (getExtension(filename).equalsIgnoreCase(EXTENSION_3GP)) {\r
-                         return R.drawable.file_movie;\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
-         }\r
\r
-         // default icon\r
-         return R.drawable.file;\r
-     }\r
  \r
-     \r
-     private static String getExtension(String filename) {\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 milliseconds that have passed since 01/01/1970\r
          return df.format(date);\r
      }\r
      \r
-     \r
      public static int getSeasonalIconId() {\r
          if (Calendar.getInstance().get(Calendar.DAY_OF_YEAR) >= 354 &&\r
                  MainApp.getAppContext().getString(R.string.app_name).equals(OWNCLOUD_APP_NAME)) {\r