Add code to handle ownCloud servers running on IDN
[pub/Android/ownCloud.git] / src / com / owncloud / android / utils / DisplayUtils.java
index 40bf119..8c4c492 100644 (file)
@@ -18,6 +18,7 @@
 \r
 package com.owncloud.android.utils;\r
 \r
 \r
 package com.owncloud.android.utils;\r
 \r
+import java.net.IDN;\r
 import java.util.Arrays;\r
 import java.util.Calendar;\r
 import java.util.Date;\r
 import java.util.Arrays;\r
 import java.util.Calendar;\r
 import java.util.Date;\r
@@ -25,7 +26,8 @@ import java.util.HashMap;
 import java.util.HashSet;\r
 import java.util.Set;\r
 \r
 import java.util.HashSet;\r
 import java.util.Set;\r
 \r
-import android.util.Log;\r
+import android.annotation.TargetApi;\r
+import android.os.Build;\r
 \r
 import com.owncloud.android.R;\r
 \r
 \r
 import com.owncloud.android.R;\r
 \r
@@ -151,6 +153,7 @@ public class DisplayUtils {
      * known MIME type.\r
      * \r
      * @param mimetype      MIME type string.\r
      * 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
      */\r
     public static int getResourceId(String mimetype, String filename) {\r
      * @return              Resource identifier of an image resource.\r
      */\r
     public static int getResourceId(String mimetype, String filename) {\r
@@ -236,4 +239,35 @@ public class DisplayUtils {
             return R.drawable.icon;\r
         }\r
     }\r
             return R.drawable.icon;\r
         }\r
     }\r
+    \r
+    /**\r
+     * Converts an internationalized domain name (IDN) in an URL to and from ASCII/Unicode.\r
+     * @param url the URL where the domain name should be converted\r
+     * @param toASCII if true converts from Unicode to ASCII, if false converts from ASCII to Unicode\r
+     * @return the URL containing the converted domain name\r
+     */\r
+    @TargetApi(Build.VERSION_CODES.GINGERBREAD)\r
+    public static String convertIdn(String url, boolean toASCII) {\r
+        \r
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {\r
+            // Find host name after '//' or '@'\r
+            int hostStart = 0;\r
+            if  (url.indexOf("//") != -1) {\r
+                hostStart = url.indexOf("//") + "//".length();\r
+            } else if (url.indexOf("@") != -1) {\r
+                hostStart = url.indexOf("@") + "@".length();\r
+            }\r
+            \r
+            int hostEnd = url.substring(hostStart).indexOf("/");\r
+            // Handle URL which doesn't have a path (path is implicitly '/')\r
+            hostEnd = (hostEnd == -1 ? url.length() : hostStart + hostEnd);\r
+            \r
+            String host = url.substring(hostStart, hostEnd);\r
+            host = (toASCII ? IDN.toASCII(host) : IDN.toUnicode(host));\r
+            \r
+            return url.substring(0, hostStart) + host + url.substring(hostEnd);\r
+        } else {\r
+            return url;\r
+        }\r
+    }\r
 }\r
 }\r