package org.itsnat.itsnatdroidtest.testact.util; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.os.Build; import org.itsnat.droid.ItsNatDroidException; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; /** * Created by jmarranz on 3/07/14. */ public class TestUtil { //public static final int ICE_CREAM_SANDWICH_MR1 = Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1; // level 15 (4.0.3) public static final int JELLY_BEAN = Build.VERSION_CODES.JELLY_BEAN; // 16 public static final int LOLLIPOP = 21; // 21 == Build.VERSION_CODES.LOLLIPOP (5.0.1) // public static final int LOLLIPOP_MR1 = 22; // 22 == Build.VERSION_CODES.LOLLIPOP_MR1 (5.1.1) public static final int MARSHMALLOW = 23; // 23 == Build.VERSION_CODES.M private final static Map<String,Field> fieldCache = new HashMap<String,Field>(); private final static Map<String,Method> methodCache = new HashMap<String,Method>(); public static void alertDialog(Context ctx,String content) { alertDialog(ctx,"Alert",content); } public static void alertDialog(Context ctx,String title,String content) { new AlertDialog.Builder(ctx).setTitle(title).setMessage(content) .setCancelable(false) .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }).setIcon(android.R.drawable.ic_dialog_alert).show(); } public static Object getField(Object obj,String fieldName) { return getField(obj,obj.getClass(),fieldName); } public static Object getField(Object obj,Class clasz,String fieldName) { try { Field field = getFieldReflection(clasz, fieldName); return field.get(obj); } catch (IllegalAccessException ex) { throw new ItsNatDroidException(ex); } } public static Object getField(Object obj,Class[] classes,String[] fieldName) { try { for (int i = 0; i < classes.length; i++) { Field field = getFieldReflection(classes[i], fieldName[i]); obj = field.get(obj); } } catch (IllegalAccessException ex) { throw new ItsNatDroidException(ex); } return obj; } public static Field getFieldReflection(Class clasz, String fieldName) { try { String key = clasz.getName() + ":" + fieldName; Field field = fieldCache.get(key); if (field == null) { field = clasz.getDeclaredField(fieldName); field.setAccessible(true); fieldCache.put(key,field); } return field; } catch (NoSuchFieldException ex) { throw new ItsNatDroidException(ex); } } public static Object callGetMethod(Object obj,String methodName) { return callGetMethod(obj,obj.getClass(),methodName); } public static Object callGetMethod(Object obj,Class cls,String methodName) { return callMethod(obj, null, cls, methodName, null); } public static Object callMethod(Object obj,Object[] params,String methodName,Class[] paramClasses) { return callMethod(obj,params,obj.getClass(),methodName,paramClasses); } public static Object callMethod(Object obj,Object[] params,Class clasz,String methodName,Class[] paramClasses) { Method method = getMethod(clasz,methodName,paramClasses); return callMethod(obj, params, method); } public static Object callMethod(Object obj,Object[] params,Method method) { try { return method.invoke(obj,params); } catch (IllegalAccessException ex) { throw new ItsNatDroidException(ex); } catch (InvocationTargetException ex) { throw new ItsNatDroidException(ex); } } public static Method getMethod(Class<?> clasz,String methodName,Class<?>[] paramClasses) { try { StringBuilder paramsKey = new StringBuilder(); if (paramClasses != null) { for(Class param : paramClasses) { paramsKey.append(":" + param.getName()); } } String key = clasz.getName() + ":" + methodName + paramsKey.toString(); Method method = methodCache.get(key); if (method == null) { method = clasz.getDeclaredMethod(methodName, paramClasses); method.setAccessible(true); methodCache.put(key,method); } return method; } catch (NoSuchMethodException ex) { throw new ItsNatDroidException(ex); } } public static Class resolveClass(String viewName) { try { return Class.forName(viewName); } catch (ClassNotFoundException ex) { throw new ItsNatDroidException(ex); } } }