package io.filepicker.utils;
import android.content.Context;
import android.os.Handler;
import android.widget.Toast;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Locale;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import io.filepicker.models.Node;
import io.filepicker.models.Provider;
/**
* Created by maciejwitowski on 10/23/14.
*/
public class Utils {
private static final SimpleDateFormat DATE_SUFFIX_FORMAT = new SimpleDateFormat("_dd_MM_yyyy_HH_mm", Locale.ENGLISH);
private Utils() {}
public static String getShortName(String name) {
return (name.length() > 25) ? name.substring(0, 25) + "..." : name;
}
// Show Toast
public static void showQuickToast(Context context, int resId) {
if (context != null) {
showQuickToast(context, context.getString(resId));
}
}
public static void showQuickToast(final Context context, final String message) {
if (context != null) {
new Handler(context.getMainLooper()).post(new Runnable() {
@Override
public void run() {
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
}
});
}
}
public static ArrayList<Node> getProvidersNodes(Context context, String[] selectedProviders, boolean exportableOnly) {
ArrayList<Node> providersNodes = new ArrayList<>();
boolean userChosenProviders = (selectedProviders != null && selectedProviders.length > 0);
for (Provider provider : Constants.PROVIDERS_LIST) {
boolean codeConditionMet = !userChosenProviders || providerSelected(provider, selectedProviders);
boolean exportConditionMet = !exportableOnly || provider.exportSupported;
if (codeConditionMet && exportConditionMet) {
providersNodes.add(provider);
}
}
return providersNodes;
}
private static boolean providerSelected(Provider provider, String[] selectedCodes) {
if (provider == null || provider.code == null || selectedCodes == null) {
return false;
}
for (String selectedCode : selectedCodes) {
if (provider.matchedCode(selectedCode)) {
return true;
}
}
return false;
}
public static boolean isProvider(Node node) {
if (!(node instanceof Provider)) {
return false;
}
for (Provider provider : Constants.PROVIDERS_LIST) {
if (node.displayName.equals(provider.displayName)) {
return true;
}
}
return false;
}
public static boolean belongsToImageOnlyProvider(Node node) {
for (Provider provider : Constants.PROVIDERS_LIST) {
if (provider.mimetypes.equals(Constants.MIMETYPE_IMAGE) && node.linkPath.contains(provider.linkPath)) {
return true;
}
}
return false;
}
public static String getUploadedFilename(String fileName) {
String timeSuffix = DATE_SUFFIX_FORMAT.format(new Date());
int extIndex = fileName.lastIndexOf(".");
if (extIndex != -1) {
String extension = fileName.substring(extIndex);
return fileName.replace(extension, timeSuffix + extension);
} else {
return fileName + timeSuffix;
}
}
public static String filenameWithoutExtension(String filename) {
return filename.replaceFirst("[.][^.]+$", "");
}
public static File getCacheFile(Context context, String path) {
return new File(context.getCacheDir(), "io_filepicker_library_" + path);
}
public static void clearCachedFiles(Context context) {
for (File file : context.getCacheDir().listFiles()) {
if (file.getName().contains(Constants.CACHED_FILES_PREFIX)) {
file.delete();
}
}
}
public static boolean isImage(String extension) {
return extension.equals(Constants.EXTENSION_JPEG) ||
extension.equals(Constants.EXTENSION_JPG) ||
extension.equals(Constants.EXTENSION_PNG);
}
public static String encodeHmac(String key, String data) throws Exception {
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(key.getBytes(), "HmacSHA256");
sha256_HMAC.init(secret_key);
return bytesToHex(sha256_HMAC.doFinal(data.getBytes()));
}
public static String bytesToHex(byte[] bytes) {
char[] hexArray = "0123456789ABCDEF".toCharArray();
char[] hexChars = new char[bytes.length * 2];
for (int j = 0; j < bytes.length; j++) {
int v = bytes[j] & 0xFF;
hexChars[j * 2] = hexArray[v >>> 4];
hexChars[j * 2 + 1] = hexArray[v & 0x0F];
}
return new String(hexChars);
}
}