001package com.gigya.android.sdk.utils;
002
003import android.annotation.SuppressLint;
004import android.content.Context;
005import android.content.pm.ApplicationInfo;
006import android.content.pm.PackageManager;
007import android.content.res.AssetManager;
008import android.os.Bundle;
009import android.os.Environment;
010import android.support.annotation.Nullable;
011
012import java.io.File;
013import java.io.IOException;
014import java.io.InputStream;
015import java.text.SimpleDateFormat;
016import java.util.Arrays;
017import java.util.Date;
018
019public class FileUtils {
020    private Context _context;
021
022    public FileUtils(Context context) {
023        _context = context;
024    }
025
026    public boolean containsFile(String fileName) {
027        final AssetManager am = _context.getAssets();
028        try {
029            final String[] list = am.list("");
030            if (list != null) {
031                return Arrays.asList(list).contains(fileName);
032            }
033        } catch (Exception ex) {
034            ex.printStackTrace();
035        }
036        return false;
037    }
038
039    /*
040    Load JSON configuration file from application Assets folder.
041     */
042    @SuppressWarnings("ResultOfMethodCallIgnored")
043    public String loadFile(String fileName) throws IOException {
044        return assetJsonFileToString(_context, fileName);
045    }
046
047    public Bundle getMetaData() {
048        try {
049            ApplicationInfo appInfo = _context.getPackageManager().getApplicationInfo(_context.getPackageName(), PackageManager.GET_META_DATA);
050            return appInfo.metaData;
051        } catch (Exception ex) {
052            ex.printStackTrace();
053        }
054        return null;
055    }
056
057    @Nullable
058    public String stringFromMetaData(String fieldName) {
059        Bundle metaData = getMetaData();
060        if (metaData == null) {
061            return null;
062        } else {
063            // Avoiding hard coded values and not string references to cause class cast exceptions.
064            if (metaData.get(fieldName) instanceof String)
065                return (String) metaData.get(fieldName);
066            else if (metaData.get(fieldName) instanceof Float || metaData.get(fieldName) instanceof Integer) {
067                return String.valueOf(fieldName);
068            } else return null;
069        }
070    }
071
072    @SuppressWarnings("ResultOfMethodCallIgnored")
073    public static String assetJsonFileToString(Context appContext, String fileName) throws IOException {
074        InputStream is = appContext.getAssets().open(fileName);
075        return streamToString(is);
076    }
077
078    @SuppressWarnings({"ResultOfMethodCallIgnored", "CharsetObjectCanBeUsed"})
079    public static String streamToString(InputStream is) throws IOException {
080        final int size = is.available();
081        byte[] buffer = new byte[size];
082        is.read(buffer);
083        is.close();
084        return new String(buffer, "UTF-8");
085    }
086
087    @SuppressLint("SimpleDateFormat")
088    public static File createImageFile() throws IOException {
089        final String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
090        final String imageFileName = "JPEG_" + timeStamp + "_";
091        final File storageDir = Environment.getExternalStoragePublicDirectory(
092                Environment.DIRECTORY_PICTURES);
093        return File.createTempFile(
094                imageFileName,  /* prefix */
095                ".jpg",         /* suffix */
096                storageDir      /* directory */
097        );
098    }
099}