Merge branch 'remove_ActionBarSherlock' into navigationDrawer_update
[pub/Android/ownCloud.git] / src / com / owncloud / android / utils / BitmapUtils.java
index df04a41..7af6960 100644 (file)
@@ -1,5 +1,8 @@
-/* ownCloud Android client application
- *   Copyright (C) 2012-2014 ownCloud Inc.
+/**
+ *   ownCloud Android client application
+ *
+ *   @author David A. Velasco
+ *   Copyright (C) 2015 ownCloud Inc.
  *
  *   This program is free software: you can redistribute it and/or modify
  *   it under the terms of the GNU General Public License version 2,
@@ -30,8 +33,6 @@ import java.io.File;
 
 /**
  * Utility class with methods for decoding Bitmaps.
- * 
- * @author David A. Velasco
  */
 public class BitmapUtils {
     
@@ -94,7 +95,9 @@ public class BitmapUtils {
         if (height > reqHeight || width > reqWidth) {
             final int halfHeight = height / 2;
             final int halfWidth = width / 2;
-    
+
+            // calculates the largest inSampleSize value (for smallest sample) that is a power of 2 and keeps both
+            // height and width **larger** than the requested height and width.
             while ((halfHeight / inSampleSize) > reqHeight
                     && (halfWidth / inSampleSize) > reqWidth) {
                 inSampleSize *= 2;
@@ -175,13 +178,53 @@ public class BitmapUtils {
     }
 
     /**
+     * Converts an HSL color value to RGB. Conversion formula
+     * adapted from http://en.wikipedia.org/wiki/HSL_color_space.
+     * Assumes h, s, and l are contained in the set [0, 1] and
+     * returns r, g, and b in the set [0, 255].
+     * from: http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c
+     *
+     * @param   integer  h       The hue
+     * @param   Integer  s       The saturation
+     * @param   Integer  l       The lightness
+     * @return  Array           The RGB representation
+     */
+    public static int[] hslToRgb(Double h, Double s, Double l){
+        Double r, g, b;
+
+        if(s == 0){
+            r = g = b = l; // achromatic
+        } else {
+            Double q = l < 0.5 ? l * (1 + s) : l + s - l * s;
+            Double p = 2 * l - q;
+            r = hue2rgb(p, q, h + 1/3) * 255;
+            g = hue2rgb(p, q, h) * 255;
+            b = hue2rgb(p, q, h - 1/3) * 255;
+        }
+
+
+        int[] array = {r.intValue(), g.intValue(), b.intValue()};
+        return array;
+    }
+
+    private static Double hue2rgb(Double p, Double q, Double t){
+        if(t < 0) t += 1;
+        if(t > 1) t -= 1;
+        if(t < 1/6) return p + (q - p) * 6 * t;
+        if(t < 1/2) return q;
+        if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;
+        return p;
+    }
+    
+
+    /**
      * Checks if file passed is an image
      * @param file
      * @return true/false
      */
     public static boolean isImage(File file) {
         Uri selectedUri = Uri.fromFile(file);
-        String fileExtension = MimeTypeMap.getFileExtensionFromUrl(selectedUri.toString());
+        String fileExtension = MimeTypeMap.getFileExtensionFromUrl(selectedUri.toString().toLowerCase());
         String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(fileExtension);
 
         return (mimeType != null && mimeType.startsWith("image/"));