public void executeActionsOnView(View view, Object mappedObject) { if (view.getTag() != null) { List<CarpaccioAction> actions; if (view.getTag() instanceof List) { // if already splitted actions = (List<CarpaccioAction>) view.getTag(); } else { // only do this work the first time actions = new ArrayList<>(); String tag = view.getTag().toString().trim(); String[] tagCalls = CarpaccioHelper.trim(tag.split(";")); for (String call : tagCalls) { if (!call.startsWith("//")) { // skip the "//function(args)" CarpaccioAction carpaccioAction = new CarpaccioAction(call); actions.add(carpaccioAction); } } view.setTag(actions); // save into view tags, replace the string with the list } CarpaccioLogger.d(TAG, view.getClass().getName() + " has actions " + actions); if (actions != null) for (CarpaccioAction action : actions) { // if it's a mapped function ex: setText($user) if (mappingManager != null && action.isCallMapping()) { mappingManager.callMappingOnView(action, view, mappedObject); if (Carpaccio.IN_EDIT_MODE) { try { callActionOnView(action, view); } catch (Exception e) { Log.e(TAG, e.getMessage(), e); } } } else // an usual function setText(florent) callActionOnView(action, view); } } if (view instanceof TextView && ((TextView) view).getText() != null) { String text = ((TextView) view).getText().toString().trim(); if (text.startsWith("$")) { if (mappingManager != null) { String textAction = "setText(" + text + ")"; CarpaccioAction carpaccioAction = new CarpaccioAction(textAction); if (view.getTag() != null) { if (view.getTag() instanceof String) view.setTag(view.getTag() + ";" + textAction); else if (view.getTag() instanceof List) { ((List) view.getTag()).add(carpaccioAction); } } else { List<CarpaccioAction> actions = new ArrayList<>(); actions.add(carpaccioAction); view.setTag(actions); } mappingManager.callMappingOnView(carpaccioAction, view, null); } } } }
public void callActionOnView(CarpaccioAction action, View view) { // find the controller for this call ObjectAndMethod objectAndMethod = action.getObjectAndMethod(); if (objectAndMethod == null) { // check if cached it String key = action.getFunction() + (action.getArgs().length + 1); objectAndMethod = savedControllers.get(key); if (objectAndMethod == null) { // if not cached, objectAndMethod = CarpaccioHelper.findObjectWithThisMethod( this.registerControllers, action.getFunction(), action.getArgs().length + 1); // +1 for the view if (objectAndMethod != null) { CarpaccioLogger.d( TAG, objectAndMethod.getObject() + " used for " + action.getCompleteCall()); } else { CarpaccioLogger.e(TAG, "cannot find any controller for " + action.getCompleteCall()); throw new CarpaccioException( "cannot find any controller for " + action.getCompleteCall()); } savedControllers.put(key, objectAndMethod); } action.setObjectAndMethod(objectAndMethod); } if (objectAndMethod != null) { // call ! CarpaccioHelper.callMethod( action.getObjectAndMethod().getObject(), action.getObjectAndMethod().getMethod(), action.getFunction(), view, action.getValues()); } }