package com.miviclin.droidengine2d.resources;

import java.io.IOException;
import java.io.InputStream;

import android.content.Context;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

import com.miviclin.droidengine2d.util.Dimensions2D;

/**
 * Cargador de recursos. Clase de utilidad, no instanciable
 * 
 * @author Miguel Vicente Linares
 * 
 */
public class AssetsLoader {
	
	/**
	 * Constructor privado porque no tiene sentido instanciar un objeto de esta clase al ser una clase de utilidad cuyos metodos son todos
	 * estaticos. Tambien impide crear subclases de esta clase.
	 */
	private AssetsLoader() {
		
	}
	
	/**
	 * Devuelve un InputStream para poder leer un asset
	 * 
	 * @param context Context
	 * @param nombreArchivo Ruta del asset, relativa a la carpeta de assets
	 * @return InputStream
	 * @throws IOException
	 */
	public static InputStream getAsset(Context context, String nombreArchivo) throws IOException {
		return context.getAssets().open(nombreArchivo);
	}
	
	/**
	 * Devuelve un InputStream para poder leer un asset
	 * 
	 * @param assetManager AssetManager de la aplicacion
	 * @param nombreArchivo Ruta del asset, relativa a la carpeta de assets
	 * @return InputStream
	 * @throws IOException
	 */
	public static InputStream getAsset(AssetManager assetManager, String nombreArchivo) throws IOException {
		return assetManager.open(nombreArchivo);
	}
	
	/**
	 * Carga un Bitmap de la carpeta de assets y lo devuelve
	 * 
	 * @param context Context
	 * @param path Ruta del bitmap, relativa a la carpeta de assets
	 * @return Bitmap
	 */
	public static Bitmap loadBitmap(Context context, String path) {
		Bitmap bitmap = null;
		InputStream in = null;
		BitmapFactory.Options options = new BitmapFactory.Options();
		options.inScaled = false;
		try {
			in = getAsset(context, path);
			bitmap = BitmapFactory.decodeStream(in, null, options);
		} catch (IOException e) {
			throw new RuntimeException("Unable to load '" + path + "'", e);
		} finally {
			if (in != null)
				try {
					in.close();
				} catch (IOException e) {
				}
		}
		return bitmap;
	}
	
	/**
	 * Carga un Bitmap de la carpeta de assets y lo devuelve
	 * 
	 * @param assetManager AssetManager de la aplicacion
	 * @param path Ruta del bitmap, relativa a la carpeta de assets
	 * @return Bitmap
	 */
	public static Bitmap loadBitmap(AssetManager assetManager, String path) {
		Bitmap bitmap = null;
		InputStream in = null;
		BitmapFactory.Options options = new BitmapFactory.Options();
		options.inScaled = false;
		try {
			in = getAsset(assetManager, path);
			bitmap = BitmapFactory.decodeStream(in, null, options);
		} catch (IOException e) {
			throw new RuntimeException("Unable to load '" + path + "'", e);
		} finally {
			if (in != null)
				try {
					in.close();
				} catch (IOException e) {
				}
		}
		return bitmap;
	}
	
	/**
	 * Devuelve las dimensiones de un bitmap que se encuentre en la carpeta de assets.<br>
	 * No carga el bitmap en memoria.
	 * 
	 * @param context Context
	 * @param path Ruta del bitmap, relativa a la carpeta de assets
	 * @return Dimensiones del bitmap
	 */
	public static Dimensions2D getBitmapBounds(Context context, String path) {
		InputStream in = null;
		int width;
		int height;
		BitmapFactory.Options options = new BitmapFactory.Options();
		options.inJustDecodeBounds = true;
		try {
			in = getAsset(context, path);
			BitmapFactory.decodeStream(in, null, options);
			width = options.outWidth;
			height = options.outHeight;
		} catch (IOException e) {
			throw new RuntimeException("Unable to load '" + path + "'", e);
		} finally {
			if (in != null)
				try {
					in.close();
				} catch (IOException e) {
				}
		}
		return new Dimensions2D(width, height);
	}
	
	/**
	 * Devuelve un AssetFileDescriptor que se puede utilizar para leer el asset especificado
	 * 
	 * @param context Context
	 * @param path Ruta del asset, relativa a la carpeta de assets
	 * @return AssetFileDescriptor
	 */
	public static AssetFileDescriptor getAssetFileDescriptor(Context context, String path) {
		AssetFileDescriptor descriptor = null;
		try {
			descriptor = context.getAssets().openFd(path);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return descriptor;
	}
	
}
@@ -822,37 +822,28 @@
 %0A%09 * @param 
-nombreArchivo
+path
  Ruta del as
@@ -988,37 +988,28 @@
 ext, String 
-nombreArchivo
+path
 ) throws IOE
@@ -1049,37 +1049,28 @@
 sets().open(
-nombreArchivo
+path
 );%0A%09%7D%0A%09%0A%09/**
@@ -1193,29 +1193,20 @@
  @param 
-nombreArchivo
+path
  Ruta de
@@ -1369,29 +1369,20 @@
  String 
-nombreArchivo
+path
 ) throws
@@ -1427,21 +1427,12 @@
 pen(
-nombreArchivo
+path
 );%0A%09

Translate the name of the parameter nombreArchivo to english