package moe.kurumi.moegallery.utils; import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Color; import android.os.Environment; import android.util.Log; import android.webkit.MimeTypeMap; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import moe.kurumi.moegallery.data.Providers; /** * Created by kurumi on 15-5-29. */ public class Utils { public static String getFileNameFromUrl(String url) { try { return URLDecoder.decode(url.substring(url.lastIndexOf('/') + 1, url.length()), "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return ""; } public static String getMimeType(String url) { String type; String extension = url.substring(url.lastIndexOf('.') + 1); MimeTypeMap mime = MimeTypeMap.getSingleton(); type = mime.getMimeTypeFromExtension(extension); return type; } public static List<String> tags2List(String tags) { return new ArrayList<>(Arrays.asList(tags.trim().split(" "))); } // read more from here: http://stackoverflow.com/a/3758880/2600042 public static String humanReadableByteCount(long bytes, boolean si) { int unit = si ? 1000 : 1024; if (bytes < unit) { return bytes + " B"; } int exp = (int) (Math.log(bytes) / Math.log(unit)); String pre = (si ? "kMGTPE" : "KMGTPE").charAt(exp - 1) + (si ? "" : "i"); return String.format("%.1f %sB", bytes / Math.pow(unit, exp), pre); } public static boolean isGif(String fileName) { return fileName.toLowerCase().endsWith(".gif"); } public static String getDomainName(String uri) { String domainName = ""; if (uri.startsWith(Providers.SCHEME_HTTP)) { domainName = uri.substring(Providers.SCHEME_HTTP.length()); } else if (uri.startsWith(Providers.SCHEME_HTTPS)) { domainName = uri.substring(Providers.SCHEME_HTTPS.length()); } domainName = domainName.substring(0, domainName.contains("/") ? domainName.indexOf('/') : domainName.length()); return domainName; } public static String getProviderName(String uri) { String providerName = getDomainName(uri); int count = providerName.length() - providerName.replace(".", "").length(); if (count == 2) { providerName = providerName.substring(providerName.indexOf('.') + 1); } if (Providers.DANBOORU_URI.contains(providerName)) { providerName = getDomainName(Providers.DANBOORU_URI); } return providerName; } public static String getHostName(String uri) { String hostname = getProviderName(uri); hostname = hostname.substring(0, hostname.lastIndexOf('.')); return hostname; } public static String fixURL(String urlStr) { return urlStr.replace("?", "%3F"); } public static int String2Color(String string) { String s = MD5(string); Log.d("", s); //int hash = string.hashCode(); int hash = 0; if (s != null) { hash = Integer.parseInt(s.substring(0, 6), 16); } Log.d("hash:", "" + hash); int r = (hash & 0xFF0000) >> 16; int g = (hash & 0x00FF00) >> 8; int b = hash & 0x0000FF; return Color.argb(255, r, g, b); } public static String MD5(String source) { try { java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5"); byte[] array = md.digest(source.getBytes()); StringBuilder sb = new StringBuilder(); for (byte anArray : array) { sb.append(Integer.toHexString((anArray & 0xFF) | 0x100).substring(1, 3)); } return sb.toString(); } catch (java.security.NoSuchAlgorithmException ignored) { } return null; } public static int getNavigationBarHeight(Context context, int orientation) { Resources resources = context.getResources(); int id = resources.getIdentifier( orientation == Configuration.ORIENTATION_PORTRAIT ? "navigation_bar_height" : "navigation_bar_height_landscape", "dimen", "android"); if (id > 0) { return resources.getDimensionPixelSize(id); } return 0; } public static void copy(File inputFile, File outputPath, String fileName) { InputStream in; OutputStream out; try { if (!outputPath.exists()) { outputPath.mkdirs(); } File outputFile = new File(outputPath, fileName); if (outputFile.exists()) { return; } in = new FileInputStream(inputFile); out = new FileOutputStream(outputFile); byte[] buffer = new byte[1024]; int read; while ((read = in.read(buffer)) != -1) { out.write(buffer, 0, read); } in.close(); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } } public static File getDir() { return new File(Environment.getExternalStorageDirectory().getPath(), "MoeGallery"); } }